2013-03-31 61 views
1

我正在閱讀管理活動生命週期的官方Android教程。請引用以下幾點。Android上的活動娛樂活動

(正常的應用程序行爲) 「當您的活動因用戶按下」後退「或活動自行完成而被銷燬時,該活動實例的系統概念將永遠消失,因爲該行爲表明活動不再需要。 「如果系統由於系統約束(而不是正常的應用程序行爲)而破壞了活動,那麼儘管實際的活動實例不見了,系統仍會記住它存在,因此如果用戶導航回到它,系統使用一組保存的數據創建一個新的活動實例,這些數據描述活動在銷燬時的狀態。「

「系統用於還原以前狀態的已保存數據是存儲在Bundle對象中的鍵值對的集合。默認情況下,保存的信息與活動的視圖層次結構有關,例如在窗口小部件中輸入的文本,滾動位置等。爲了保存活動的其他狀態信息,例如成員變量,必須實現onSaveInstanceState()並將鍵值對添加到Bundle對象中。「

請看看我是否可以從上面的正確總結:

該系統的資源意識和能破壞活動以恢復內存。如果系統這樣做,那麼它會留下一個選項,以便在以後需要時將已銷燬的活動恢復到之前的狀態。

State = view-state(默認,自動完成)+ member-variable-state(手動,直到程序員)。

我的問題是,如果系統正在銷燬某個活動以釋放某些內存,那麼它是否會破壞目的,如果它允許我們保留活動的「副本」,以便可以恢復活動 到了與銷燬前相同的地步?

+0

我想這就是爲什麼他們提供onpause和onresume –

回答

0

不,它不會打敗目的:

  • 一個Bundle爲可序列化進行了優化,所以Android框架可能只是它寫入磁盤。
  • 您需要表示您的狀態的數據比您運行的應用程序副本所需的RAM數量小得多。例如,如果您向用戶顯示圖像,則可能只需保存圖像的位置,而不是全部數據。另外,每個Android應用程序都是一個全新的Dalvik虛擬機,所以如果所有活動都來自不同的應用程序,那麼殺死一個活動意味着一個Dalvik虛擬機就會少一些 - 而且每個Dalvik虛擬機可能都需要相對大量的內存。
+0

這是一個有趣的角度,你給你的答案,引入Dalvik虛擬機。 – softwarelover