2010-06-27 52 views
10

我最近遇到了一些問題,最近發生了onSaveInstanceState()onRestoreInstanceState()。我有多個活動使用這些方法在系統清理它們的情況下保存狀態。他們大多數工作,除了一個,我不知道爲什麼。onRestoreInstanceState()在預期時未被調用

具體什麼情況是這樣的:

  • 我有我的模擬器的運行和開發工具安裝到destroy()所有活動的時候都不再可見。 (以便我可以證明保存/恢復工作正常。)
  • 有問題的活動啓動後,我繼續更改其狀態。
  • 我開始一個新的活動,讓它運行一會兒,然後使用'後退'按鈕去我以前的活動。
  • 重新回到問題活動中時,我注意到默認狀態回來了,因此它沒有它應該的狀態。

我已經注意到,onSaveInstanceState()叫,onCreate()被調用,但有一個空包,並onRestoreInstanceState()不會被調用。

有沒有人見過這個?

+0

我很抱歉,我知道這在另一個問題的線程提供問題是很久以前的問題,但您是如何保存活動狀態的?你能看看我的問題嗎? http://stackoverflow.com/questions/26142255/retrieve-an-activity-after-time-out-warning-notification – Hamid 2014-10-01 20:25:08

回答

3

我相信我已經發現了這個問題,並且在原始問題中沒有披露這些細節。

我保存在我的包中的一件事是相當大的(500x1000像素位圖)。當我從Bundle中刪除它時,其他一切都被保存了,onCreate()方法被Bundle調用,onRestoreInstanceState()也被調用。

因此,我相信您可以保存在onSaveInstanceState()中的最大大小的Bundle,這是沒有記錄的。 (至少據我可以告訴)

4

您正在使用的開發工具設置可能沒有您期望的行爲。

如果要測試onSaveInstanceState()/onRestoreInstanceState(),最簡單的方法是更改​​方向(<Ctrl>-<F11>)。默認情況下,使用實例狀態銷燬和重新創建活動。

+0

謝謝你的回答。我沒有提到的是,我已經在清單中鎖定了以下屬性的活動: android:configChanges =「keyboardHidden | orientation」 android:screenOrientation =「portrait」 – 2010-06-28 12:13:42

+0

我試着改變方向, onRestoreInstanceState()'方法。但是我沒有在這個方法中恢復變量,而且我的EditText先前已經輸入了值,而沒有任何內容。你可以解釋嗎? – Geek 2013-08-13 10:47:36

+0

@Aash:有一個'onSaveInstanceState()'和'onRestoreInstanceState()'的內置實現,可以處理明顯的用戶可變小部件狀態,就像'EditText'中的文本一樣。 – CommonsWare 2013-08-13 10:58:35