jsbridge实现及原理_【React Native for Android】jsBridge实现原理

基于源码版本:0.28

简单整理了一下几个组件之间的关系,

1.JSBridge初始化过程

React Native for Android(RN4A)的核心流程在QZone的框架启动核心路径剖析一文中讲述得很详细,本文不再赘述,主要解析RN4A里面的Native&JS通信机制。

注:Java在RN4A中是Native模块,涉及JNI的部分在java中术语为native,注意大小写的区分不要混淆。

在ReactInstanceManager初始化时会创建ReactContext,其中主要的一部分工作就是注册Native&js模块,我们看看它都做了什么:

1.1模块注册

在createReactContext()中会先注册CoreModulesPackage的Native&JS模块与所有的ViewManager,之后注册在ReactNativeHost中(0.28之前的版本在ReactActivity中)声明的所有其他ReactPackage的Native&JS模块,其中:

o    Native模块注册

将所有的NativeModule添加进NativeModuleRegistry.Builder后,它会依次build每一个NativeModule,主要做的事情就是生成moduleID、解析带@ReactMethod注解的方法;

o    JavaScript模块注册

o    在js层,js模块在写的时候都需要加上BatchedBridge.registerCallableModule('module', Module);注册到BatchedBridge.js中以供后续查找;

o    在java层,js模块将想要暴露出来的方法声明为一个接口类,它被build的时候利用Java动态代理生成实例, 具体的方法invoke由CatalystInstance.callFunction代理执行。

注册完后,会初始化CatalystInstance, 模块注册、build生成后的NativeModuleRegistry与JavaScriptModuleRegistry都由CatalystInstance持有.

1.2初始化ReactBridge

CatalystInstance初始化时会初始化ReactBridge,ReactBridge是在Java层与js沟通的桥梁(废话..),它是一个native类,大部分实现位于Bridge.h/.cpp,在初始化时调用的native initialize()方法对应OnLoad.cpp中的create函数,它的需要三个参数:

o    JavaScriptExecutor

RN4A使用WebKit的JavaScriptCore(JSCore)来解析js, JavaScriptExecutor的实现类JSCJavaScriptExecutor是一个native类,它封装了JSCore的逻辑(对应JSCExecutor.h/.cpp)。

o  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值