以编程方式重新启动React Native App

时间:2016-05-27 18:15:04

标签: android ios react-native

是否可以在不编写任何本机代码的情况下以编程方式重新启动React Native应用程序?

例如,我从this question的答案中知道我可以使用以下命令重启Android应用:

Intent i = getBaseContext().getPackageManager()
         .getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

我可以使用React Native做同样的事吗?

7 个答案:

答案 0 :(得分:17)

如果您只想重新启动JS部分,则可以使用React Native Restart Package。这适用于Android和iOS。

如果要重新启动整个应用程序,目前还没有反应原生包。如果您想自己创建,请检查以下链接

Building the custom Android module for React Native

如果您在编写基本JAVA代码时遇到困难,可以使用React Native Create Library生成样板文件

答案 1 :(得分:8)

除了上述内容外,您还可以像下面这样使用Codepush重新启动应用程序:

import CodePush from 'react-native-code-push';
CodePush.restartApp();

实际上,React Native Restart Package就是从那里获取代码的。

答案 2 :(得分:3)

对于iOS,React Native通过“ DevSettings” https://github.com/facebook/react-native/blob/75f2da23c5d557862cf4b7bcdd8a1445b54d1c31/React/Modules/RCTDevSettings.mm#L240-L243

公开了一种“ reload”方法
import { NativeModules } from "react-native";


NativeModules.DevSettings.reload();

答案 3 :(得分:2)

您可以像这样使用ReactInstanceManager

    final ReactInstanceManager instanceManager = getReactInstanceManager();
    instanceManager.recreateReactContextInBackground();

答案 4 :(得分:1)

您可以执行以下操作:

yarn add react-native-restart
react-native link react-native-restart

并按如下方式使用:

import RNRestart from 'react-native-restart'; // Import package from node modules

// Immediately reload the React Native Bundle
RNRestart.Restart();

答案 5 :(得分:0)

您不需要外部包装。

DevSettings.reload()来自62岁以上。这是DevSettings模块https://reactnative.dev/docs/devsettings#reload

的文档

答案 6 :(得分:0)

如果您使用的是Expo,还可以使用https://docs.expo.io/versions/v38.0.0/sdk/updates/专门使用Updates.reloadAsync()作为替代。来自expo的Updates API可让您以编程方式控制和响应应用程序的无线更新。

安装

expo install expo-updates

使用

import * as Updates from 'expo-updates';

...

async function reloadApp () {
    await Updates.reloadAsync();
}