我有一个活动,其中包含片段,并且片段内的ReactRootView
中添加了React Native。我已将ReactInstanceManager
添加为应用程序中的单例,并将其附加到rootview并使用startApplication()
类的ReactRootView
方法启动应用程序。当只有一个Activity实例存在时,一切正常。
我有一个流程,我需要启动相同活动的新实例。这次React Native应用程序确实加载了,我可以看到为第二个Activity调用了render函数,但是它更新了第一个附加活动的视图,而不是更新第二个Activity的视图。
我正在调用附加片段中ReactInstanceManager
的所有生命周期方法,并且正在调用onPause()
和onResume()
回调。我真的被困在这里,不知道该怎么做。我已经尝试创建一个ReactInstanceManager的新实例,但它也没有帮助。
这是我想要实现的流程: ReactFragment - > OtherActivity - > ReactFragment
我需要带有ReactFragment的Activity来拥有不同的实例,并在第二个实例中再次加载react应用程序,但是render()
函数更新第一个实例而不是第二个实例。
实例化ReactInstanceManager
:
public synchronized ReactInstanceManager getReactInstanceManager(Activity activity) {
if (reactInstanceManager == null) {
reactInstanceManager = ReactInstanceManager.builder()
.setApplication(activity.getApplication())
.setJSMainModulePath("index")
.setJSBundleFile("index.android.bundle")
.addPackages(Arrays.<ReactPackage>asList(
new FabricPackage(),
new MainReactPackage(),
new MSREventBridgePackage(),
new Interactable()
))
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
}
return reactInstanceManager;
}
将ReactInstanceManager
添加到ReactRootView
类并启动应用程序:
mReactInstanceManager = ReactApplicationManager.getInstance().getReactInstanceManager(getActivity());
mReactRootView.startReactApplication(
mReactInstanceManager,
REACT_MODULE,
null);
调用ReactInstanceManager
的所有生命周期方法:
@Override
public void onResume() {
super.onResume();
if (mReactInstanceManager != null) {
mReactInstanceManager.onHostResume(getActivity(), (DefaultHardwareBackBtnHandler)getActivity());
}
}
@Override
public void onPause() {
super.onPause();
if (mReactInstanceManager != null) {
mReactInstanceManager.onHostPause(getActivity());
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (mReactInstanceManager != null) {
mReactInstanceManager.onHostDestroy(getActivity());
}
}