小编Yur*_*ury的帖子

在React本机活动的多个实例之间共享一个ReactInstanceManager

我将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的方法: …

android react-native

5
推荐指数
1
解决办法
752
查看次数

标签 统计

android ×1

react-native ×1