はじめに: この記事では プロジェクト作成の手順については公式ウェブサイトを参照してください。この記事で分析した 上記のプロジェクトは 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 損失の問題の解決策
GtkTreeView コンポーネントは、美しい通常のリストやツリーのようなリストを作成できる高度な...
Linux での MySQL データベースのマスター/スレーブ同期構成の利点は、この方法をバックアッ...
背景同僚がセキュリティ プロジェクトに取り組んでおり、AWS サーバーに秘密兵器を展開する必要があり...
目次1. 公式インストールスクリプトを使用した自動インストール手動インストール古いバージョンをアンイ...
Vueはブール値でストレージを保存します今日、問題に遭遇しました。バックグラウンドから返された真偽の...
目次背景1) yumのkeepchche機能を有効にする: 方法1 2) yum-utils ソフト...
最近、IM を実行するときに、これらの 3 つのキーワードを同時に使用したときに問題が発生しました。...
メモ: とにかく体験してみましょう。記録: NO.209この例の環境:仮想マシン: vmwareオペ...
DIV+css構造 CSSレイアウトを学んでいますか?まだ純粋な CSS レイアウトを完全に習得でき...
MySQL 認証コマンド grant の使用方法:この記事の例は MySQL 5.0 以降で実行され...
HTMLタグの説明1. HTMLタグタグ: !DOCTYPE説明: HTML ドキュメントが準拠する...
例えば: <link rel="スタイルシート" href="h...
ウェブページにBaiduマップを挿入するBaidu Maps を自分の Web ページに追加したい場...
Nginx の公式 Web サイトから Windows バージョンの Nginx をダウンロードしま...
構造擬似クラスセレクタの紹介構造擬似クラスセレクターは、いくつかの特殊効果を処理するために使用されま...