概念介紹:
- ReactContext:繼承自ContextWrapper,是ReactNative應(yīng)用的上下文
- ReactInstanceManager: 是ReactNative應(yīng)用的管理類拧略,負責創(chuàng)建ReactContext表蝙,CatalystInstance等。
- CatalystInstance:Java層劫映、C++層违孝、JS層通信總管理刹前,管理Java層、JS層核心Module映射表和回調(diào)雌桑,三端通信的入口于橋梁
RN應(yīng)用的啟動流程如下圖所示:
image.png
詳細流程:
- 在程序啟動的時候喇喉,也就是在ReactActivity的onCreate()方法中,我們創(chuàng)建一個ReactInstanceManager對象
- 創(chuàng)建ReactRootView(FrameLayout)調(diào)用ReactRootView.startReactApplication()方法啟動應(yīng)用
- 在異步任務(wù)ReactContextInitAsyncTask中校坑,創(chuàng)建ReactContext
- 在異步任務(wù)中拣技,完成如下工作:
- 根據(jù)ReactPackage,創(chuàng)建JavaScriptModuleRegistry和NativeModuleRegistry注冊表
- 創(chuàng)建管理類CatalystInstanceImpl
- 創(chuàng)建JS耍目、Native膏斤、與UI線程隊列
- 調(diào)用CatalystInstanceImpl.runJsBundle()加載JS bundle
- 后臺任務(wù)執(zhí)行完成后,會調(diào)用ReactInstanceManager.setupReactContext()設(shè)置創(chuàng)建好的ReactContext制妄,并將ReactRootView加載進去
- 調(diào)用RN應(yīng)用的JS入口AppRegistry來啟動應(yīng)用
- JS層找到已經(jīng)注冊的啟動組件掸绞,執(zhí)行renderApplication來渲染整個應(yīng)用
PS:
- 實際開發(fā)中,一般會寫一個單例來獲取ReactInstanceManger耕捞,多個ReactFragment和ReactActivity可以共享一個ReactInstanceManager