2011-04-07 109 views
26

我試圖將數據保存在我的活動中並進行恢復。 我將數據保存在onSaveInstanceState()上,然後嘗試恢復onRestoreInstanceState()中的數據。爲什麼onRestoreInstanceState()永遠不會被調用

我設置了斷點,方法onSaveInstanceState()被調用。但onRestoreInstanceState()onCreate()從來沒有。

這裏是我的步驟:

  1. 開始我Activity
  2. 按手機上的'Home'按鈕。打電話給onSaveInstanceState()
  3. 單擊啓動器中的圖標並再次啓動我的Activity

此時,只有onRestart()被調用。但不是onRestoreInstanceState()onCreate()

有誰知道爲什麼嗎?

回答

9

那麼,如果調用onRestart(),實例變量的值將由應用程序堆棧本身維護,因此您不需要恢復它們。

onCreate()方法僅在您的ActivityonStop()被調用並且進程被終止時調用。

請參考Activity生命週期Android Activity Life Cycle瞭解清楚。

您可能想要檢查onStop()方法是否被調用,並且您的進程是否被終止。我不認爲你的程序會被你描述的情況所殺。

onRestoreInstanceState()方法非常棘手。我不知道它是什麼時候被調用的,但是我看到它在從Potrait轉換到Landscape時被調用了一次。

+0

http://stackoverflow.com/questions/4967435/onrestoreinstancestate-not-called-when-screen-wake-up - 有一個答案是什麼onRestoreInstanceState是。 – jellyfish 2011-05-13 14:37:10

+3

你的回答不完全準確,或者至少不清楚,因爲在onStop()之後要麼調用onRestart(),要麼調用onDestroy()。如果onDestroy()被調用,那麼你回到onCreate() – LuxuryMode 2012-01-11 19:28:18

+0

謝謝。 onRestore ...在方向改變時似乎被調用。簡化的東西對我來說沒有結束(+: – Everyone 2012-11-09 18:08:38

5

我問similiar問題早在here

這裏有一些步驟來測試onRestoreInstanceState()

  1. 按下主屏幕
  2. 亞行
  3. 終止該應用重新啓動您的應用程序
+0

感謝一個好的技巧,以檢查此 – 2016-01-28 08:00:06

11

doc:

系統調用onRestoreInstanceState()只如果有恢復已保存的狀態。

+2

爲什麼會的onSaveInstanceState()被調用,如果onRestoreInstanceState()是不會永遠被稱爲 這太瘋狂了。? 。如果我切換到另一個活動,被調用的onSaveInstanceState()讓我認爲當我回來時我可以訪問已保存的實例狀態,但它從不會觸及任何restore/onCreate函數,因爲它正在重新啓動。也在文檔中解釋。 – 2017-06-21 00:06:36

3

按照以下步驟(使用過Android Studio):

  1. 新建logcat的過濾器,例如AppState
  2. 在模擬器上啓動應用程序。你會看到:

    I /屆時AppState:的onCreate

    I /屆時AppState:在onStart

    I /屆時AppState:的onResume

  3. 按CTL-F12旋轉模擬器。你會看到:

    I/StateChange:在onPause

    I/StateChange:的onSaveInstanceState

    I/StateChange:的onStop

    I/StateChange:的onDestroy

    I/StateChange:的onCreate

    I/StateChange:onStart

    I/StateChange:onRestoreInstanceState

    I/StateChange:的onResume

這通過使配置更改設備,諸如從縱向旋轉到橫向導致活性的破壞和娛樂。

相關問題