【问题标题】:How do I exit/shut down a React Native app?如何退出/关闭 React Native 应用程序?
【发布时间】:2016-04-20 11:48:14
【问题描述】:

如果我的 React Native 应用程序无法连接到其后端,我会显示一个带有 OK 按钮的警报。如果发生这种情况,应用程序继续运行没有意义,所以我想在单击按钮时将其关闭。我该怎么做?

我怀疑密钥在 AppRegistry 中,但文档有点少。

【问题讨论】:

    标签: reactjs native react-native


    【解决方案1】:

    对于Android,使用BackHandler退出应用程序:

    import React, { BackHandler } from 'react-native';
    
    BackHandler.exitApp();
    

    【讨论】:

    • BackAndroid 已被弃用,取而代之的是BackHandler(请参阅facebook.github.io/react-native/docs/backhandler.html
    • 请注意,对于那些希望真正“停止”他们的应用程序的人,这不会“停止”应用程序,或停止进程运行。应用仍在后台运行,用户将返回“桌面”
    • 是的,它不会停止应用程序。
    • 它对 android 端有帮助:)
    • 对于 iOS? BackHandler 仅适用于 Android。
    【解决方案2】:

    我回答这个问题太晚了,但我认为我选择的方式可能会对某人有所帮助,所以我正在回答这个问题。

    componentWillMount() {
       BackHandler.addEventListener('hardwareBackPress', this.backPressed);
    }
    
    componentWillUnmount() {
       BackHandler.removeEventListener('hardwareBackPress', this.backPressed);
    }
    
    backPressed = () => {
      Alert.alert(
        'Exit App',
        'Do you want to exit?',
        [
          {text: 'No', onPress: () => console.log('Cancel Pressed'), style: 'cancel'},
          {text: 'Yes', onPress: () => BackHandler.exitApp()},
        ],
        { cancelable: false });
        return true;
    }
    

    【讨论】:

    • 这是正确的答案!!!它的工作原理与例外情况完全相同。
    【解决方案3】:

    今天没有特定的 react-native 方法可以做到这一点。您必须从事物的本机方面完成此操作。

    此外,您是在为 iOS 开发吗? Apple 已声明应用程序不应自行关闭。

    【讨论】:

    • 这是一个 Android 应用程序,但谢谢,也许我会将 OK 按钮更改为 Retry 按钮,让用户尝试重新连接或自行退出。感谢您节省了我对 AppRegistry 的实验。 :)
    • 尽管没有开箱即用的 react-native 方法来实现这一点,但有一个适合 react-native seamles 的解决方案:请参阅下面的答案以实现本机模块/功能关闭 android 和 ios 应用程序...
    【解决方案4】:

    编写一个本机模块,在调用时执行以下操作:

    IOS:

    exit(9);
    

    安卓:

    ((YourApplication) self.getApplicationContext()).kill();
    

    ...编辑...

    或者直接使用我创建的:https://www.npmjs.com/package/react-native-exit-app

    【讨论】:

    • 注意:引用的库使用GPLv3许可(软件分发时必须提供源代码)
    • 我知道这可能是一些项目的问题......事实上,我正在考虑在下一个版本中将我的项目重新授权给 MIT。无论如何,项目中的本机代码并不比我上面的答案更多,因此人们可以轻松实现自己的模块。 (只是想尽可能鼓励开源)
    • 这里有一个 MIT 版本:npmjs.com/package/react-native-close-app
    • @sudo 对此react-native-exit-appreact-native-close-app 的任何更新不会从后台任务列表中删除应用程序?
    • @Sagar 哦,那是很久以前的事了,我不记得我是否最终使用了它。但至少在 iOS 中,我认为没有办法让应用程序从应用程序切换器中移除自身。我认为即使它崩溃了,它仍然会存在并且如果用户切换到它会重新初始化。
    【解决方案5】:

    这就是我实现它的方式:

      componentWillMount() {
        BackHandler.addEventListener('hardwareBackPress', this.handleBackButtonClick);
      }
      componentWillUnmount() {
        BackHandler.removeEventListener('hardwareBackPress', this.handleBackButtonClick);
      }
      handleBackButtonClick() {
        BackHandler.exitApp();
        return true;
      }
    

    【讨论】:

      【解决方案6】:

      这个 npm 模块帮助我解决了同样的问题 - react-native-exit-app

      import RNExitApp from 'react-native-exit-app';
      ...
      RNExitApp.exitApp();
      ...
      

      【讨论】:

      • 我使用的是相同的,但它会将应用程序保持在后台任务中,它不会被杀死任何想法?
      猜你喜欢
      • 1970-01-01
      • 2019-08-20
      • 2020-01-27
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      相关资源
      最近更新 更多