react native Android端代码执行的大体流程:
第一步:在应用的Application
里做RN的初始化操作。
有两个需要注意的对象:
ReactNativeHost
:持有ReactInstanceManager
实例,做一些初始化操作。- 重载方法
onCreate
里面的SoLoader
:加载C++底层库,准备解析JS。
第二步:页面继承ReactActivity
,ReactActivity
作为JS页面的容器。
第三步:有了ReactActivity
作为容器,我们就可以用JS开发页面了。
react native启动流程相关的一些重要概念
ReactContext
概念:
ReactContext
继承于ContextWrapper
,也就是说它和Android
中的Context
是一个概念,是整个应用的上下文。那么什么是上下文呢,我们知道Android
的应用模型是基于组件的应用设计模式, 组件的运行需要完整的运行环境,这种运行环境便是应用的上下文。
NativeModule/UIManagerModule/JavascriptModule
NativeModule
/UIManagerModule
:NativeModule
是Java暴露给JS调用的APU集合,UIManagerModule
也是供JS调用的API集合,它用来创建View
。业务放可以通过实现NativeModule
来自定义模块,通过getName()
将模块名暴露给JS层,通过@ReactMethod
注解将API暴露给JS层。
JavaScriptModule
:JS暴露给Java
调用的API集合等。业务放可以通过继承JavaScriptModule
接口类似自定义接口模块,声明与JS相对应的方法
即可。
一、执行器的实现
1.1 Native代码执行器
ExecutorDelegate
:在Executor.h中定义,由JsToNativeBridge
实现,该抽象类用于JS代码调用Native
代码。
1.2 JS代码执行器
JS的解析是在Webkit-JavaScriptCore中完成的,JSCExexutor.cpp对JavaScriptCore
的功能做了进一步的封装,我们来看一下它的实现。
JSExecutor
:在Executor.h中定义,正如它的名字那样,它是用来执行JS代码的。执行代码的命令是通过JS层的BatchedBridge
传递过来的。
RN给了我们自定义JS解析器的能力,可以在CatalystInstance.Builder
里 setJSExecutor()
。
二、RN应用的启动流程
一句话概括启动流程:先是应用终端启动并创建应用上