如何在MainActivity中使用ReactApplicationContext,让android 可以在原生任何一处向RN上层发送通知

如何在MainActivity中使用ReactApplicationContext,让android 可以在原生任何一处向RN上层发送通知
    例如我们app启动的Activity为MainActivity,而MainActivity这里需要继承ReactActivity,然后我们来点进去看下ReactActivity具有的方法,除了通用的activity的生命周期方法,
这里有一个方法:
    protected final ReactNativeHost getReactNativeHost() {
        return mDelegate.getReactNativeHost();
    }

1.什么是ReactNativeHost呢?
它是RN项目在初始化Application的时候被用到,像是一个容器,用来管理ReactInstanceManager等,举例几个ReactNativeHost中常用到的方法:
getReactInstanceManager、getJSBundleFile、getPackages(后续有时间可单独介绍这些方法的作用)。
2.ReactInstanceManager是做什么的?
个人的理解是用来维系react native js上层与原生之间的一个桥梁,RN上层view的生命周期依赖于ReactInstanceManager(如有理解错误,欢迎指正)。

话不多说,我们可以在MainActivity的onCreate方法中直接上代码:
        ReactInstanceManager mReactInstanceManager = getReactNativeHost().getReactInstanceManager();
        if (null == mReactInstanceManager.getCurrentReactContext()) {   // APP启动过程中,初始化ReactInstanceManager等需要时间,先获取一次上下文,如未获取到
            mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {  //监听初始化是否完成
                public void onReactContextInitialized(ReactContext validContext) {
                    ReactApplicationContext context = (ReactApplicationContext) validContext;
                    // do something
                }
            });
        }else{
           ReactApplicationContext context  =  mReactInstanceManager.getCurrentReactContext();
           // do something
        } 

注意在Activity销毁时,记得调用removeReactInstanceEventListener方法remove监听,防止内存泄露。(这里只是提供方法,如实际项目中使用,仍有优化之处)


在ReactInstanceManager中,我们需要用到这个方法,可以看到在获取上下文时,
  @VisibleForTesting
  public @Nullable ReactContext getCurrentReactContext() {
    synchronized (mReactContextLock) {
      return mCurrentReactContext;
    }
  }
  

 以上即为在MainActivity中使用ReactApplicationContext的方法,如有不足之处,欢迎指正和探讨,谢谢~~

你可能感兴趣的:(react,native,react,native,android)