2013-08-22 39 views
1

當操作系統將完全忘記關於活動的狀態並且所有信息都與活動(任何有關活動的記錄)相關?活動捆綁包何時會丟失?

換句話說,它會使Bundle成爲一個新實例嗎?

我找到了下面的解釋,但它並沒有解釋這個「殺死捆綁」點?

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/app/Activity.java#Activity.onSaveInstanceState%28android.os.Bundle%29

調用,以從一個活動檢索每個實例的狀態被殺死,使得狀態可以的onCreate(android.os.Bundle)或onRestoreInstanceState(android.os.Bundle)被恢復之前(由此方法填充的android.os.Bundle將被傳遞給兩者)。 在活動可能被殺死之前調用此方法,以便在將來某個時間回來時它可以恢復其狀態。例如,如果活動B在活動A之前啓動,並且在某些時刻活動A被殺死以回收資源,則活動A將有機會通過此方法保存其用戶界面的當前狀態,以便當用戶返回時到活動A,用戶界面的狀態可以通過onCreate(android.os.Bundle)或onRestoreInstanceState(android.os.Bundle)恢復。 不要將此方法與活動生命週期回調混淆,例如onPause(),當活動置於後臺或銷燬途中時總是調用onPause(),或在銷燬前調用onStop()。當onPause()和onStop()被調用時的一個例子是,而不是這個方法是當用戶從活動B返回到活動A時:沒有必要在B上調用onSaveInstanceState(android.os.Bundle),因爲那個特定的實例將永遠不會恢復,所以系統避免調用它。當onPause()被調用而不是onSaveInstanceState(android.os.Bundle)時的一個例子是當活動B在活動A前面啓動時:系統可以避免在活動A上調用onSaveInstanceState(android.os.Bundle)因爲A的用戶界面的狀態將保持完整,所以在B的生命週期中不會被殺死。 默認實現通過在具有ID的層次結構中的每個視圖上調用android.view.View.onSaveInstanceState(),並通過保存當前焦點視圖的ID來爲您處理大部分UI每實例狀態(所有這些都通過onRestoreInstanceState(android.os.Bundle)的默認實現來恢復)。如果您重寫此方法以保存未被每個視圖捕獲的附加信息,那麼您可能需要調用默認實現,否則應準備好保存每個視圖的所有狀態。 如果調用,則此方法將在onStop()之前發生。無法保證它是否會在onPause()之前或之後發生。

回答

1

有許多情況下,可能發生這種情況:

下面是引用提的關於重建活動不同 的用例small topic

如果你想在應用程序生命週期更多的控制權:

看看一個在application對象以獲取更多信息。

個人建議:

我想你不應該在乎的時候/什麼,這是後話了 android系統會爲您管理您的代碼應優化 處理所有usecases(當該包將爲空或不)。一個包 應該只用於處理狀態保持,如果你想 堅持數據你應該看看fileI/O,SQLlite或共享 首選項。

+0

在配置上的變化,是毫無疑問的。我們可以在碎片中使用set retain爲true並處理。什麼會持續更長的捆綁或保留碎片?這是我遇到這個問題,以評估捆綁將永遠摧毀 – nish1013

+0

我不是100%確定,但我相信他們將持續相同的金額,他們將被初始化,直到出現需要系統釋放資源的條件(例如應用程序對象中的低memmorry方法)。只有從事框架工作的Google員工才能給您一個完整的答案。但是我個人認爲,作爲開發人員,只要你處理代碼中的所有用例,你就不應該關心它 – Tobrun

相關問題