2011-04-06 60 views
0

從Android的活動API: http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle我應該在哪裏恢復我的Android狀態

它說: 「國家可以在的onCreate(捆綁)或onRestoreInstanceState(包)來恢復」。我的問題是我應該在哪裏恢復我的狀態?爲什麼我可以在任何地方做到這一點?

謝謝。

+0

要麼是完全正常的,無論哪個適合你的程序的流程更好。 – 2011-04-06 23:23:54

回答

1

考慮在onCreate中恢復狀態,因爲空包的存在是onCreate中其他有用操作的有用標誌。

編輯:看看我的代碼,讀取onCreate中的包的另一個原因是我更新onCreate中的小部件。所以這個狀態需要在onCreate中被知道。如果狀態來自捆綁或者來自前綴或者來自調用意圖,則無關緊要。所以模式看起來像

getMyState(); //可能是從一個包或lastNonConfigurationInstance或首選項或主叫意圖

someWidget.setYourStateFromInfoInGetState

+0

但是,當該活動重新啓動時,這種方法是否會阻止恢復? (即,當將手機旋轉90度時)? – Aleadam 2011-04-06 22:53:12

+1

@Aleadam一個有趣的練習是在每個狀態方法中寫入Log.d。如果你這樣做,下面的方法(不包括)被調用onOrientationChange:onSaveInstanceState,onPause,onStop,onDestroy和onCreate。 – JAL 2011-04-06 23:04:39

0

我會在這裏推測,因爲我從來沒有使用onSaveInstanceState,但從文檔中,你應該使用後者。 onCreate在活動啓動時被調用,onRestoreInstanceState在onStart()之後被調用,onCreate()或onRestart()之後發生。

http://developer.android.com/reference/android/app/Activity.html

保護無效的onCreate(捆綁 savedInstanceState)由於:當活動開始時調用API級別1

。 這是大多數初始化 應該去:調用的setContentView(INT) 膨脹活動的UI,使用 findViewById(int)以編程方式 與UI部件交互, 調用managedQuery(android.net.Uri, 字符串[],字符串,字符串[],字符串)要 檢索遊標數據是 顯示等等

保護無效onRestoreInstanceState (捆綁savedInstanceState)自:API 級別1

此方法是當活動正在 重新初始化從以前保存的 狀態,在 savedInstanceState這裏給出在onStart() 後調用。大多數 實現將簡單地使用 的onCreate(捆綁),以恢復他們的 狀態,但它有時是方便 畢竟 初始化在這裏做它已經完成或 讓子類來決定是否 使用默認的實現。 此方法的默認實現 執行先前已被onSaveInstanceState(Bundle)凍結的任何視圖狀態 的恢復。

保護無效在onStart()自:API 1級

的onCreate(捆綁)後調用 - onRestart()當活動 已經停了,但現在又 被顯示給用戶之後或 。它會在 後跟onResume()。