是否可以在不编写任何本机代码的情况下以编程方式重新启动React Native应用程序?
例如,我从this question的答案中知道我可以使用以下命令重启Android应用:
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
我可以使用React Native做同样的事吗?
答案 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();
}