はじめに: この記事では プロジェクト作成の手順については公式ウェブサイトを参照してください。この記事で分析した 上記のプロジェクトは 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 損失の問題の解決策
最近、機能拡張の要件を受け取りました。ただし、新しい要件で参照されているデータインターフェイスは、X...
最近のプロジェクトに取り組んでいるとき、下の図に示すように、画像を参照すると常に下部に空白スペースが...
ページング効果は、参考までにvueプロジェクトに実装されています。具体的な内容は次のとおりです。 1...
目次JVM クラスローダーTomcat クラスローダークラスを検索ロードクラスクラスをロードしようと...
01. コンパイルオプションとカーネルコンパイルLinux カーネル (英語: linux kern...
ステップ1: ディープ「グラフィックドライバー」をインストールするdeepin v20にはデフォルト...
以前、純粋な CSS を使用して波の効果を実現する方法をいくつか紹介しました。それらについては、次の...
仮想マシンを初めて使用する方や、仮想マシンに Linux をインストールしたばかりの方は、システムが...
序文テストを行う際、大量のデータによる負荷に耐えるプロジェクトの能力をテストするために、通常はテスト...
この記事では、Jingdongの詳細ページの画像の拡大を実現するためのjsの具体的なコードを紹介しま...
最近、Bootstrap を使って Web サイトを開発しています。表を処理していたところ、PC で...
目次方法1 1. 構成とインストールの手順:方法2方法3要約する方法1 1. 構成とインストールの手...
目次序文プロミスチェーンMDN エラー連鎖デフォルト処理略語非同期待機序文この記事を書いた理由は、ユ...
方法 1: Google の詳細検索を使用します。たとえば、次に示すように.asp?id=9などの ...
navicatを使用してテストと学習を行います。まず、 set autocommit = 0;を使用...