私は追跡しようとしている非常にまれな(数千のセッションのうちの1つ)クラッシュを経験しています。私はそれがのonCreateオーバーライドだ時に、それはいくつかの断片を作成しますが、それらのいずれかを表示したり、付着しない、活動を持っています。このコードではアクティビティのonCreateが終了する前にフラグメントのonAttachを呼び出せますか?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
mainMenuFragment = new MainMenuFragment();
locationFragment = new LocationFragment();
mainPresenter = new MainPresenter(this);
}
私も含まれているライブラリから来ている「MainPresenter」を作成しますすべてのビジネスロジック。プレゼンターは、断片のONATTACHメソッドから使用されている:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
MainActivity mainActivity = (MainActivity) activity;
mainPresenter = mainActivity.getMainPresenter();
mainPresenter.refreshUI();
}
問題は、非常に稀に私がONATTACHでヌルPTR例外を取得していないだということ、です。まれに、アクティビティのonCreateが終了する前にフラグメントのonAttachが実行されている可能性がありますか(つまり、mainPresenterがnull)?
android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3253)
android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3349)
android.app.ActivityThread.handleRelaunchActivity (ActivityThread.java:5383)
android.app.ActivityThread.access$1200 (ActivityThread.java:221)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1800)
android.os.Handler.dispatchMessage (Handler.java:102)
android.os.Looper.loop (Looper.java:158)
android.app.ActivityThread.main (ActivityThread.java:7225)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)
今週はこの問題に直面しました。アンドロイドスタジオのAndroidモニタータブを使ってアプリをバックグラウンドで終了した後にアプリを再起動したほうが一般的であることがわかりました。テストのために信頼性の高い複製が必要な場合は、役立つかもしれません。 – stkent
@stkent - ありがとう、私はそれを試してみましょう – user3690202