如何在反应原生的终止应用程序中检测应用程序?

zid*_*ryi 4 javascript android react-native

当应用程序被用户杀死时,我想从 API 更改状态数据。

我曾尝试使用 componentWillUnmount 在应用程序关闭时更改数据,我也使用 AppState

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


Run Code Online (Sandbox Code Playgroud)

我希望当应用程序被用户杀死时,它可以自动更改状态。

fol*_*nfo 7

nextAppState === 'inactive'或检查是否background不会告诉您应用程序是否被“杀死”(刷出)。

因为当原生层被杀死时,javascript 引擎也会被杀死。所以没有办法告诉 javascript 该应用程序已被杀死。

如果您只想在应用程序被终止后初始化某些内容,您可以在内部 constructor componentDidMount基础组件中触发一些函数,您知道它只会为您的应用程序安装一次。

补充:现在我们可以(可能更喜欢)使用useEffect(()=>{}, [])代替上面的例子。

如果您真的想确保该应用程序之前被杀死,也许您可​​以将其存储nextAppState到某个持久存储中并检查该值是否匹配 inactive 或 background 之一,因为应用程序状态不会在应用程序初始启动时更改。


Nag*_*kr. 6

尝试这个 :

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

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

handleAppStateChange = (nextAppState) => {
   if (nextAppState === 'inactive') {
   console.log('the app is closed');
  }    
 }
Run Code Online (Sandbox Code Playgroud)

  • 它可以在 IOS 上运行,但不能在 Android 上运行。你对安卓有什么想法吗? (3认同)