我正在經歷一次非常罕見的(幾千次會話中的一次)崩潰,我試圖追查。我有一個,在它的onCreate覆蓋,它會創建一些片段,但不顯示或附加任何他們的活動:在Activity的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完成之前(即mainPresenter爲空)在片段的onAttach被執行的情況下?
更新
這裏是調用堆棧導致崩潰的原因,如果它是有幫助的一部分:
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 Studio的Android監視器選項卡在後臺終止應用程序後重新啓動應用程序,這種情況會更常見。如果您需要可靠的複製測試,那可能會有用。 – stkent
@stkent - 謝謝,我會試一試 – user3690202