Mobile 如何检测React本机应用程序何时关闭(未挂起)?

Mobile 如何检测React本机应用程序何时关闭(未挂起)?,mobile,reactjs,react-native,Mobile,Reactjs,React Native,我到处都找遍了,找不到答案。我如何检测用户何时尝试关闭我的React本机应用程序(如进程正在运行,他们手动管理应用程序并强制退出)。我想添加注销功能时,这种情况发生,但无法找到一种方法来检测它AppState仅在应用程序被带进或带出后台时检测 看起来您可以检测到上一个状态并将其与下一个状态进行比较。从我在网上可以找到的信息来看,你无法检测到应用程序正在关闭还是进入后台,但你可以检测它是处于非活动状态(关闭),还是处于后台 来自 import React,{Component}来自“React”

我到处都找遍了,找不到答案。我如何检测用户何时尝试关闭我的React本机应用程序(如进程正在运行,他们手动管理应用程序并强制退出)。我想添加注销功能时,这种情况发生,但无法找到一种方法来检测它
AppState
仅在应用程序被带进或带出后台时检测

看起来您可以检测到上一个状态并将其与下一个状态进行比较。从我在网上可以找到的信息来看,你无法检测到应用程序正在关闭还是进入后台,但你可以检测它是处于
非活动状态
(关闭),还是处于
后台

来自
import React,{Component}来自“React”
从“react native”导入{AppState,Text}
类AppStateExample扩展组件{
状态={
appState:appState.currentState
}
componentDidMount(){
AppState.addEventListener('change',this.\u handleAppStateChange);
}
组件将卸载(){
AppState.removeEventListener('change',this.\u handleAppStateChange);
}
_HandLeapStateChange=(nextAppState)=>{
if(this.state.appState.match(/inactive | background/)和&nextapstate=='active'){
console.log('应用程序已到达前台!')
}
this.setState({appState:nextapstate});
}
render(){
返回(
当前状态为:{this.state.appState}
);
}
}

作为一种简单的方法,我们可以在根组件中使用componentWillUnmount()来检测应用程序是否关闭。因为根组件仅在应用程序关闭时卸载。:)

刚刚遇到了同样的问题。被接受的答案实际上并不符合OP中的要求

黑客解决方案是在应用程序新打开时打开的第一个屏幕上设置一个标志,而在应用程序刚刚被后台启动时不显示该屏幕


不是非常优雅,我无法显示示例代码,但它解决了我的特殊问题。

也在寻找解决方案。到目前为止你找到什么了吗?嘿,你找到什么解决方案了吗?有什么解决方案了吗?不幸的是,还没有,下面user888750的答案是我们4年来最接近的答案,还没有解决方案?谢谢你的回复,但不幸的是,这会检测到应用程序是在后台还是在前台,这根本不能回答问题。你可以做到这一点,你只需要使用第三方库。查看react native queue了解更多信息:非活动状态仅适用于iOS。在此处检查每个平台的所有可用状态:此解决方案将无法工作,因为当用户终止应用程序时,
组件将卸载
未被调用。您确定吗?因为我只是再检查一次,它就成功了。(注意:我的意思是componentWillUnmount方法在App.js文件中):)您是否点击了应用程序切换器,然后刷卡以终止应用程序?据我所知,没有办法知道用户何时终止应用程序,正如您在中看到的
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>
    );
  }

}