はじめに: この記事では プロジェクト作成の手順については公式ウェブサイトを参照してください。この記事で分析した 上記のプロジェクトは 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 損失の問題の解決策
背景最近、面接でデータベース トランザクションについてよく質問されます。通常は、@Transacti...
Web フロントエンド開発に含まれる内容は、主に W3C 標準の構造、動作、パフォーマンスです。では...
目次2. 目的2.1 オブジェクトにプロパティを追加する2.3 オブジェクトの複製2.4 複数のオブ...
通常は <ul><li> タグを使用しますが、dd タグと dt タグも便利...
1. レンダリングを見る進むを選択: 後方を選択: コードは次のとおりです(例): <テンプレ...
node-media-server を使用するプロセスの一部を記録します。この記事の環境はWindo...
この記事では、モバイルデバイス上の 1 ピクセルの境界線の問題を解決する 5 つの方法を紹介します。...
一般的なアプリケーションでは、timestamp、datetime、int 型を使用して時間形式を保...
この記事では、Reactでダブルスライダークロススライドを実装するための具体的なコードを参考までに共...
目次バイト機能使用環境プロジェクトを構築する構成vite.config.ts tsconfig.js...
目次序文: 1. Navicatの紹介2. シンプルなチュートリアルの共有接続管理ライブラリテーブル...
新しく作成された Web サイトの場合は、ASP.NET MVC5 を例に挙げます。セッションを処理...
ストアドプロシージャとは簡単に言えば、これは強力で、JAVA 言語のメソッドに似た比較的複雑な論理関...
ヘッドと DTD はページには表示されませんが、Web ページの重要な要素です。 なぜ失敗したのでし...
序文MySQL スロー クエリ ログは、MySQL が提供するログ レコードの一種です。これは、応答...