调用活动销毁后处理后退按钮

时间:2016-03-14 10:56:02

标签: android android-lifecycle

我试图了解它是如何可能的。我偶尔会发生一次撞车事故。这是堆栈跟踪:

java.lang.NullPointerException: Attempt to invoke interface method 'com.mycompany.myapp.fragments.timeline.TimelineFragmentView com.mycompany.myapp.injections.FragmentComponent.createTimelineFragmentView()' on a null object reference
    at com.mycompany.myapp.fragments.timeline.TimelineFragment.createView(TimelineFragment.java:28)
    at com.mycompany.myapp.fragments.timeline.TimelineFragment.createView(TimelineFragment.java:17)
    at com.mycompany.myapp.fragments.BaseFragment.onCreateView(BaseFragment.java:33)
    at com.mycompany.myapp.fragments.ScreenFlowBaseMenuFragment.onCreateView(ScreenFlowBaseMenuFragment.java:22)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
    at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:958)
    at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1666)
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:586)
    at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:169)
    at com.mycomany.mayapp.MainActivity.onBackPressed(MainActivity.java:125)
    at android.app.Activity.onKeyUp(Activity.java:2483)
    at android.view.KeyEvent.dispatch(KeyEvent.java:2664)
    at android.app.Activity.dispatchKeyEvent(Activity.java:2736)
    at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
    at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:224)

    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)

FragmentComponent在下一个方法的最后一行无效:

@Override
protected void onDestroy() {
    super.onDestroy();

    backendResponseMonitor.stop();
    view.stop();

    Graph graph = (Graph) getApplication();
    graph.destroyFragmentComponent();
}

由于所有内容都在UI线程上运行,因此在调用活动onDestroy后执行后退按钮处理。我错过了一些活动生命周期的概念吗?

不要保持活动开发者选项标记已开启

1 个答案:

答案 0 :(得分:0)

super.onDestroy();调用超类onDestroy方法,该方法清除活动中使用的所有引用。因此,您将获得零点异常。只需按照以下方式设置onDestroy

@Override
protected void onDestroy() {
    backendResponseMonitor.stop();
    view.stop();

    Graph graph = (Graph) getApplication();
    graph.destroyFragmentComponent();

    super.onDestroy();
}