Реагировать на встроенный пакет перезагрузки программно
Я хочу разработать приложение для реагирования на нативные. Но JS-файлы не на моей локальной машине. Я буду скачивать пакет с удаленного сервера.
Ниже код работает на данный момент. Но как я могу перезагрузить пакет js из пути к файлу?
public class MainApplication extends Application implements ReactApplication {
public static String mBundleFilePath = "sdcard/Download/index.android.bundle";
public final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage()
);
}
@Override
protected String getJSMainModuleName() {
return "index";
}
@Override
protected String getJSBundleFile() {
return mBundleFilePath;
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
}
}
Есть несколько способов перезагрузки. Но это не поддерживает внешний путь. reloadJSFromServer работает только для http / https.
getReactNativeHost().getReactInstanceManager().getDevSupportManager().reloadJSFromServer(httpUrl);
handleReloadJS загружает с localhost/8081
getReactNativeHost().getReactInstanceManager().getDevSupportManager().handleReloadJS();
РЕДАКТИРОВАТЬ
Перезапустить активность не работает для меня:)
Intent myIntent = new Intent(getApplicationContext(), MainActivity.class);
finish();
startActivity(myIntent);
2 ответа
Используйте код ниже
ReactInstanceManager manager = application.getReactNativeHost().getReactInstanceManager();
manager.recreateReactContextInBackground();
Вы можете использовать библиотеку https://github.com/avishayil/react-native-restart.
import RNRestart from 'react-native-restart'; // Import package from node modules
// Immediately reload the React Native Bundle
RNRestart.restart();