RN應(yīng)用的啟動(dòng)流程

概念介紹:

  • ReactContext:繼承自ContextWrapper,是ReactNative應(yīng)用的上下文
  • ReactInstanceManager: 是ReactNative應(yīng)用的管理類,負(fù)責(zé)創(chuàng)建ReactContext,CatalystInstance等。
  • CatalystInstance:Java層、C++層、JS層通信總管理,管理Java層、JS層核心Module映射表和回調(diào),三端通信的入口于橋梁

RN應(yīng)用的啟動(dòng)流程如下圖所示:

image.png

詳細(xì)流程:

  1. 在程序啟動(dòng)的時(shí)候,也就是在ReactActivity的onCreate()方法中,我們創(chuàng)建一個(gè)ReactInstanceManager對(duì)象
  2. 創(chuàng)建ReactRootView(FrameLayout)調(diào)用ReactRootView.startReactApplication()方法啟動(dòng)應(yīng)用
  3. 在異步任務(wù)ReactContextInitAsyncTask中,創(chuàng)建ReactContext
  4. 在異步任務(wù)中,完成如下工作:
  • 根據(jù)ReactPackage,創(chuàng)建JavaScriptModuleRegistry和NativeModuleRegistry注冊(cè)表
  • 創(chuàng)建管理類CatalystInstanceImpl
  • 創(chuàng)建JS、Native、與UI線程隊(duì)列
  • 調(diào)用CatalystInstanceImpl.runJsBundle()加載JS bundle
  1. 后臺(tái)任務(wù)執(zhí)行完成后,會(huì)調(diào)用ReactInstanceManager.setupReactContext()設(shè)置創(chuàng)建好的ReactContext,并將ReactRootView加載進(jìn)去
  2. 調(diào)用RN應(yīng)用的JS入口AppRegistry來啟動(dòng)應(yīng)用
  3. JS層找到已經(jīng)注冊(cè)的啟動(dòng)組件,執(zhí)行renderApplication來渲染整個(gè)應(yīng)用

PS:

  • 實(shí)際開發(fā)中,一般會(huì)寫一個(gè)單例來獲取ReactInstanceManger,多個(gè)ReactFragment和ReactActivity可以共享一個(gè)ReactInstanceManager
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容