我将React Native集成到本机Android应用程序中,并从本机代码创建React Native活动的新实例.
以下是包装ReactInstanceManager的类的代码:
public class ReactNativeInstanceWrapper
{
private static ReactNativeInstanceWrapper instance = new ReactNativeInstanceWrapper();
public static ReactNativeInstanceWrapper getInstance() {
return instance;
}
private ReactInstanceManager reactInstanceManager;
public ReactInstanceManager GetReactInstanceManager()
{
return reactInstanceManager;
}
public ReactInstanceManager Rebuild(Application application)
{
Boolean isDebugBuild = AppBuildType.IsBuildConfigDebug(application.getBaseContext());
reactInstanceManager = null;
synchronized (this) {
reactInstanceManager = ReactInstanceManager.builder()
.setApplication(application)
.setBundleAssetName("index.android.bundle")
.setJSMainModuleName("index.android")
.addPackage(new MainReactPackage())
.addPackage(new ReactIntegrationPackage())
.addPackage(new PickerPackage())
.addPackage(new LinearGradientPackage())
.setUseDeveloperSupport(isDebugBuild)
.setInitialLifecycleState(LifecycleState.BEFORE_CREATE)
.build();
}
if (!reactInstanceManager.hasStartedCreatingInitialContext())
{
reactInstanceManager.createReactContextInBackground();
}
return reactInstanceManager;
}
Run Code Online (Sandbox Code Playgroud)
我想在应用程序加载时解析一个js包并缓存它,这使得加载React Native的速度更快.问题是它看起来像在多个活动之间共享ReactInstanceManager导致一些问题.
例如,在一种情况下,如果我在我的某个活动中打开一个共享表,而不是回到我的RN活动并关闭它,我就无法在新的RN活动中打开一个对话框.它抛出一个WindowManager $ BadTokenException,这可能意味着它试图将它附加到一个不存在的活动.
在RN活动中,以下是我在OnCreate中创建ReactRootView的方法: …