2016-03-14 71 views
0

我想了解它是如何可能的。我遇到了偶爾發生的崩潰。這裏是堆棧跟蹤:後退按鈕在活動銷燬後被處理

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後進行調用。我是否缺少活動生命週期的一些概念?

不保留活動開發人員選項標誌被打開

+3

嘗試將'super.onDestroy()'移動到方法中的最後一個語句。 – JafarKhQ

+0

謝謝!墜機的原因是什麼?如何移動超級通話將有助於崩潰? –

+0

'super.onDestroy();'將清理'Activity'。檢查這個答案http://stackoverflow.com/questions/9625920/should-the-call-to-the-superclass-method-be-the-first-statement/9626268#9626268 – JafarKhQ

回答

0

super.onDestroy();調用清除在活動中使用的所有引用父類的方法onDestroy。因此你正在得到零點異常。請按如下方式製作您的onDestroy

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

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

    super.onDestroy(); 
} 
+1

這只是另一個人的評論,您轉換爲您的答案。不冷靜的男人:P – Vucko

+0

對不起,我沒有注意到它。開始打字,然後出去了一下。對不起Vucko和對不起JafarKhQ –

+0

我知道兄弟,也發生在我身上很多,我只是打開帖子,忘記它5分鐘,當我回來 - >已經回答,我沒有注意到:D – Vucko