反応のネイティブで少数の画面(チャット)が書かれたハイブリッドアプリを作成しました。私はreact-native integration with existing app
ガイドラインに従っており、アンドロイド活動が作成されたときに反応を開始するアクティビティを作成しました。 マイアクティビティコードは、のようになります。このアプローチでハイブリッドアプリで反応したネイティブビューの読み込み時間を改善する方法
public class MyReactActivity extends Activity implements
DefaultHardwareBackBtnHandler {
private ReactRootView mReactRootView;
private ReactInstanceManager mReactInstanceManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReactRootView = new ReactRootView(getApplication());
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
.setJSMainModulePath("index")
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "MyReactNativeApp", null);
setContentView(mReactRootView);
}
@Override
public void invokeDefaultOnBackPressed() {
super.onBackPressed();
}
}
問題が作成されるたびMyReactActivity
に作成されたアプリケーションを反応していることであり、このプロセスは、1〜2秒かかります。ユーザーがこのアクティビティに戻ると、再びこのアクティビティに戻っても、再びアプリケーションに反応します。私はこのロード時間を短縮したい。
上記のコードを少し変更して、ReactRootViewとReactInstanceManagerを静的に変更した場合。私は自分のアクティビティを作成するたびに、同じReactRootViewとInstanceManagerを使用します。これにより、自分のアクティビティの読み込み時間は間違いなく改善されますが、パフォーマンスが低下する可能性があります。新しいアクティビティコードが
public class MyReactActivity extends Activity implements
DefaultHardwareBackBtnHandler {
private static ReactRootView mReactRootView;
private static ReactInstanceManager mReactInstanceManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(mReactRootView != null) {
return;
}
mReactRootView = new ReactRootView(getApplication());
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
.setJSMainModulePath("index")
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "MyReactNativeApp", null);
}
@Override
public void onStart() {
super.onStart();
setContentView(mReactRootView);
}
@Override
protected void onStop(){
if (mReactRootView != null) {
ViewGroup parent = (ViewGroup) mReactRootView.getParent();
if(parent != null) {
parent.removeView(mReactRootView);
}
}
super.onStop();
}
@Override
public void invokeDefaultOnBackPressed() {
if (mReactRootView != null) {
ViewGroup parent = (ViewGroup) mReactRootView.getParent();
if(parent != null) {
parent.removeView(mReactRootView);
}
}
super.onBackPressed();
}
}
このアプローチでは、正常に動作しているようだが、私は、それは常にメモリに保管しますReactRootViewとReactInstanceManagerへの静的な参照として、メモリリークにつながるかもしれないと思う、と同様です。意外にも、メモリモニタ用のアナライザタスクを実行するとメモリリークが発生しません。
誰にもこれに関する提案はありますか?静的リファレンスを使用してもよろしいですか?アクティビティをロードするたびに反応アプリの読み込み時間を最適化する他の方法はありますか?
ありがとうございます!
そしてもちろん、あなたは上の「活動を維持していない」とそれをテスト?いいえ?あなたは... – Selvin
正直なところ、私はそのようなオプションを知らなかった。あなたのおかげで私はちょうどテストし、すべてが正常に動作しているようだ。 – ggsrivas
何か提案がありますか? – ggsrivas