有没有像 iOS 上的 RCTBridge React Native 一样的东西,但对于 Android 上的 Reac



在我工作的地方,我们试图以稍微非标准的方式使用反应原生。我们不想将它用于视图,而只是使用它来运行Java代码,以允许我们分别使用Java,Swift/Objective-c和Javascript在js和Android iOS和Web的前端中创建所有业务逻辑。

我们在iOS中正在做这样的事情:

NSURL *bundleURL = ...;
RCTBridgeModuleProviderBlock block = nil;
NSDictionary *launchOptions = nil;
RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:bundleURL moduleProvider:block launchOptions:nil];

我们的iOS开发人员能够创建一个RCTBridge,然后他用它来与objective-c的JS代码进行通信。他计划在应用程序的生命周期内保持这座桥。我在Android/Java上找不到类似的东西。我确实让ReactInstanceManager像下面这样工作:

mReactInstanceManager = ReactInstanceManager.builder()
                .setApplication(getApplication())
                .setBundleAssetName("index.android.bundle")
                .setJSMainModuleName("index.android")
                .addPackage(new MainReactPackage())
                .addPackage( searchPackage )
                .setUseDeveloperSupport( BuildConfig.DEBUG )
                .setInitialLifecycleState( LifecycleState.RESUMED)
                .build();
        mReactInstanceManager.createReactContextInBackground();

使用 ReactInstanceManager 连接起来的烦人之处在于它需要一些生命周期回调,这有点使其与特定活动相关联。我想做iOS正在做的事情,并创建一个桥梁,并在多个不同的活动中为整个应用程序保留该实例。

那么iOS中是否存在类似于RCTBridge的东西呢?如果不是,那么我有理由不应该在多个活动中共享相同的 reactInstanceManager?

文档指出,只要将其连接到活动生命周期方法,您就可以将 ReactInstanceManager 保留为单例并在多个活动中使用它。

不过,我发现了这种方法的一个问题。在 Android 上,如果您的活动扩展了基本的 ReactNative 活动,则调用onDestroy()ReactInstanceManager会被销毁。因此,如果您从MainActivity打开第二个活动 - 一旦返回您的MainActivitymReactInstanceManager 将无效,您的单例基本上一文不值。

我已经打开了一个关于这个的问题。

相关内容