Как определить, когда приложение React Native закрыто (не приостановлено)?

Я повсюду искал и не могу найти ответ на этот вопрос. Как я могу определить, когда пользователь пытается закрыть приложение React Native (как в процессе работы, и они вручную управляют своими приложениями и принудительно выходят из него). Я хотел бы добавить функцию выхода из системы, когда это произойдет, однако не может найти способ ее обнаружить. AppState отображается только при обнаружении приложения и выходе из него.

Ответы

Ответ 1

Похоже, вы можете обнаружить предыдущее состояние и сравнить его со следующим состоянием. Вы не можете обнаружить, что приложение закрывается по сравнению с переходом в фоновый режим, из того, что я могу найти в Интернете, но вы можете определить, было ли оно inactive (закрытым) или в background.

Пример из React Native Docs

import React, {Component} from 'react'
import {AppState, Text} from 'react-native'

class AppStateExample extends Component {

  state = {
    appState: AppState.currentState
  }

  componentDidMount() {
    AppState.addEventListener('change', this._handleAppStateChange);
  }

  componentWillUnmount() {
    AppState.removeEventListener('change', this._handleAppStateChange);
  }

  _handleAppStateChange = (nextAppState) => {
    if (this.state.appState.match(/inactive|background/) && nextAppState === 'active') {
      console.log('App has come to the foreground!')
    }
    this.setState({appState: nextAppState});
  }

  render() {
    return (
      <Text>Current state is: {this.state.appState}</Text>
    );
  }

}

Ответ 2

Вы не можете запретить пользователям закрывать приложение. Единственное, что вы можете сделать, это поймать пользователя, когда он просто закрывает приложение (неактивное состояние вашего приложения). Вы можете попытаться поймать это действие и нажать сообщение "Не закрывайте меня, noooooo!".

Ответ 3

В качестве простого метода мы можем использовать componentWillUnmount() внутри корневого компонента для обнаружения закрытия приложения. Потому что Root компонент Unmount только тогда, когда приложение закрыто. :)