Reactネイティブコードを作成せずにネイティブアプリをプログラムで再起動することは可能ですか?
たとえば、 この質問 への回答から、Androidアプリを次のように再起動できることを知っています。
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
React Nativeでも同じことができますか?
JSパーツのみを再起動する場合は、 React Native Restart Package を使用できます。これはAndroidとiOSの両方で動作します。
アプリケーション全体を再起動する場合、現時点ではネイティブパッケージに対応していません。自分で作成したい場合は、次のリンクを確認してください
カスタムのビルドAndroidのモジュールReact Native
ベースJavaコードを書くのが難しい場合は、 React Native Create Library を使用してボイラープレートを生成できます。
上記の内容に加えて、次のようにCodepushを使用してアプリを再起動できます。
import CodePush from 'react-native-code-Push';
CodePush.restartApp();
実際、それは React Native Restart Package がコードを取得した場所です。
このようにReactInstanceManagerを使用できます
final ReactInstanceManager instanceManager = getReactInstanceManager();
instanceManager.recreateReactContextInBackground();
IOSの場合、React Nativeは、「DevSettings」を介して「reload」メソッドを公開します https://github.com/facebook/react-native/blob/75f2da23c5d557862cf4b7bcdd8a1445b54d1c31/React/Modules/ RCTDevSettings.mm#L240-L24
import { NativeModules } from "react-native";
NativeModules.DevSettings.reload();
次のようにできます:
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();