はじめに: この記事では プロジェクト作成の手順については公式ウェブサイトを参照してください。この記事で分析した 上記のプロジェクトは Android アプリケーションであることがわかっています。 Android アプリケーションの起動プロセスは次のとおりです。最初の メインアプリケーションパブリッククラス MainApplication は Application を拡張し、ReactApplication を実装します { プライベートファイナルReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @オーバーライド パブリックブール値 getUseDeveloperSupport() { BuildConfig.DEBUG を返します。 } @オーバーライド 保護されたリスト<ReactPackage> getPackages() { @SuppressWarnings("不要なローカル変数") リスト<ReactPackage> パッケージ = 新しい PackageList(this).getPackages(); // パッケージに対するその他の操作はパッケージを返します。 } @オーバーライド 保護された文字列 getJSMainModuleName() { 「インデックス」を返します。 } } @オーバーライド パブリックReactNativeHost getReactNativeHost() { mReactNativeHost を返します。 } @オーバーライド パブリックvoid onCreate() { スーパーのonCreate(); SoLoader.init(this, /* ネイティブ exopackage */ false); フリッパーを初期化します(これ、getReactNativeHost().getReactInstanceManager()); } 1. メンバー変数
2. onCreate で:
リアクトネイティブホスト
Reactインスタンスマネージャー このクラスはコアクラスであり、主に JS の読み込みの管理、ライフサイクルの維持、JS と C++ 間の相互作用の管理などを担当します。 メインアクティビティ次に、 パブリッククラスMainActivityはReactActivityを拡張します{ @オーバーライド 保護された文字列 getMainComponentName() { 「myProject」を返します。 } } パブリック抽象クラス ReactActivity は AppCompatActivity を拡張します DefaultHardwareBackBtnHandler、PermissionAwareActivityを実装します。 プライベート最終 ReactActivityDelegate mDelegate; @オーバーライド 保護されたvoid onCreate(バンドルsavedInstanceState) { super.onCreate(保存されたインスタンス状態); mDelegate.onCreate(保存されたインスタンス状態); } 保護されたvoid onCreate(バンドルsavedInstanceState) { 文字列 mainComponentName = getMainComponentName(); mReactデリゲート = 新しいReactDelegate( getPlainActivity()、getReactNativeHost()、mainComponentName、getLaunchOptions()) { @オーバーライド 保護されたReactRootView createRootView() { ReactActivityDelegate.this.createRootView() を返します。 } }; mMainComponentName != null の場合 { loadApp(メインコンポーネント名); } } ここで、ReactDelegate インスタンスが最初に作成されます。次に、 保護されたvoid loadApp(String appKey) { mReactDelegate.loadApp(appKey); getPlainActivity().setContentView(mReactDelegate.getReactRootView()); } ここから、 パブリック void loadApp(String appKey) { mReactRootView が null の場合 throw new IllegalStateException("アプリがすでに実行中なので、loadApp を実行できません。"); } mReactRootView = createRootView(); mReactRootView.startReactApplication() を実行します。 getReactNativeHost().getReactInstanceManager(), appKey, mLaunchOptions); } ここでは、rootView ( ルートビューの作成まず、rootView とは何かを見てみましょう。 パブリッククラス ReactRootView は FrameLayout を拡張し、RootView、ReactRoot を実装します { /* ... */ ReactRootView は getReactInstanceManager 保護されたReactInstanceManager createReactInstanceManager() { ReactInstanceManagerBuilder ビルダー = /* ... */ (ReactPackage reactPackage : getPackages()) の場合 { ビルダーにパッケージを追加します。 } 文字列 jsBundleFile = getJSBundleFile(); jsBundleFile != null の場合 { ビルダーでJSBundleFileを設定します(jsBundleFile); } それ以外 { バンドルアセット名をアサーションにセットします。 } React インスタンスマネージャー reactInstanceManager = builder.build(); reactInstanceManager を返します。 } 何が起こっているのか、以下に示します。
Reactアプリケーションを起動するパブリック void startReactApplication(/* */) { // ... 試す { // ... mReactInstanceManager.createReactContextInBackground(); ついに // ... } } 最後に、
詳細な分析については、別の記事「React Native startReactApplication プロセス分析」に掲載します。 要約するこの記事をまとめると、
React Native の起動プロセスの簡単な分析に関するこの記事はこれで終わりです。React Native の起動に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: VMWARE で Centos8 仮想マシンをコピーすることによって発生する IP 損失の問題の解決策
Black Duck の 2017 年のオープンソース調査では、回答者の 77% がオープンソース...
vue を使用してプロジェクトを開発する場合、フロントエンドでは次のような日付と時刻を計算する必要が...
1. 改行を強制せず、省略記号で終了します。コードをコピーコードは次のとおりです。 <div ...
目次序文Vue 更新ビューパッチ同じVノードパッチVノード更新子供序文Vue は仮想 DOM を使用...
目次序文Denoとは何ですか? Node.jsとの比較建築ESモジュール依存関係の管理TypeScr...
1. PVとIPの統計一日のPV(ページビュー)をカウントする cat access.log | ...
目次1. Vueの概要Vue公式サイトMVVM アーキテクチャ パターンVue の紹介2. Vueを...
1. 問題の説明今日、システム ログ ファイルを確認する必要がありますが、/var/log/mess...
MySQL には、複数の .sql ファイル (SQL ステートメントを含む) をインポートする方法...
目次1. インストール2. カプセル化に問題はない3. ファイルを作成する4. アドレス設定をリクエ...
html、アドレス、引用ブロック、本文、dd、div、 dl、dt、フィールドセット、フォーム、フレ...
1. JDKをインストールする コンピュータの動作桁を確認します。 uname -ar 2017 x...
この記事では、ネイティブ JS で実装されたブラインドの特殊効果を紹介します。効果は次のとおりです。...
前面に書かれた環境: MySQL 5.7+、MySQL データベースの文字エンコードは utf8、テ...
この記事では、画像の切り取りとアップロードを実装するためのvue-cropperコンポーネントの具体...