我遇到了一个非常罕见的崩溃问题(每几千个会话中才会出现一次),我正在试图追踪这个问题。我有一个Activity,在其onCreate方法中创建了一些Fragment,但没有显示或附加它们:
@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",它来自包含我们所有业务逻辑的库。该Presenter在片段的onAttach方法中被使用:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
MainActivity mainActivity = (MainActivity) activity;
mainPresenter = mainActivity.getMainPresenter();
mainPresenter.refreshUI();
}
问题是,我偶尔会在 onAttach 中遇到空指针异常。有可能在某些罕见情况下,片段的 onAttach 执行早于 Activity 的 onCreate 完成(即 mainPresenter 为空)吗?
更新:
以下是崩溃前调用堆栈的部分内容,希望对您有所帮助:
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)