iOS上的RCTBridge React Native是否有适用于Android的React Native?

时间:2016-02-19 17:01:09

标签: android ios react-native

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

我们在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吗?

1 个答案:

答案 0 :(得分:2)

The docs state只要将其连接到活动生命周期方法,就可以将ReactInstanceManager作为单例保存并在多个活动中使用它。

我发现这个方法存在一个问题。在Android上,如果您的活动扩展了基本的ReactNative活动,则SenderConstructor会在调用ReactInstanceManager时获得destroyed。 因此,如果您从onDestroy()打开第二个活动 - 一旦返回MainActivityMainActivity无效,您的单身人士基本上毫无价值。

我已经开了issue了。