はじめに: この記事では プロジェクト作成の手順については公式ウェブサイトを参照してください。この記事で分析した 上記のプロジェクトは 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 損失の問題の解決策
この記事の例では、参考のために航空機戦争ゲームを実装するためのJSの具体的なコードを共有しています。...
Reactのdiffアルゴリズムの理解diffアルゴリズムは、 Virtual DOMの変更された部...
この記事では、参考までに、シンプルな虫眼鏡を実装するためのJavaScriptの具体的なコードを紹介...
CSS3以前は、グラデーション画像は背景画像としてのみ使用できました。 CSS3 のグラデーション構...
目次1. プロジェクトの説明2. Nginxイメージの作成3. MySQLイメージの作成4. PHP...
MySQL 変数には、システム変数とシステム変数が含まれます。今回の学習課題はユーザー定義変数です。...
最近、あるプロジェクトを手伝ったのですが、MySQL マシンがしばらくすると自動的に停止し続けました...
ザビックスZabbix ([`zæbiks]) は、WEB インターフェースに基づいて分散システム監...
#事例: 従業員の給与水準を照会する 選択 給与、等級 から 従業員 参加する ジョブグレード g ...
メモ: とにかく体験してみましょう。記録: NO.209この例の環境:仮想マシン: vmwareオペ...
ナレッジポイントをプレビューします。アニメーションフレーム背景グラデーションvar() と calc...
目次1. シナリオの説明: 2. 事例のデモンストレーション: 2.1. MySQLの障害発生前にデ...
しばらくReactを勉強した後、実践してみたいと思います。そこで、個人のブログのウェブサイトを再構築...
概要Binlog2sql は、Python で開発されたオープンソースの MySQL Binlog ...
序文MySQLでは、準備、実行、割り当て解除を正式にはPREPARE STATEMENTと呼びます。...