維護一個 Activity 的生命週期非常重要,因為 Activity 隨時會被系統回收掉。
Android 的虛擬機(VM)是使用堆疊 (Stack based) 管理。主要有四種狀態:
* Active (活動)
* Paused (暫停)
* Stopped (停止)
* Dead (已回收或未啟動)
Active (活動)
「Active」狀態是使用者啟動應用程式或 Activity 後,Activity 運行中的狀態。
在 Android 平台上,同一個時刻只會有一個 Activity 處於活動(Active)或運行(Running)狀態。其他的 Activity 都處於未啟動(Dead)、停止(Stopped)、或是暫停(Pause)的狀態。
Paused (暫停)
「Paused」狀態是當 Activity 暫時暗下來,退到背景畫面的狀態。
當我們使用Toast、AlertDialog、或是電話來了時,都會讓原本運行的 Activity 退到背景畫面。新出現的Toast、AlertDialog等介面元件蓋住了原來的 Activity 畫面。Activity 處在「Paused」狀態時,使用者無法與原 Activity 互動。
Stopped (停止)
「Stopped」狀態是有其他 Activity 正在執行,而這個 Activity 已經離開螢幕,不再動作的狀態。
透過長按「Home」鈕,可以叫出所有處於「Stopped」狀態的應用程式列表。在「Stopped」狀態的 Activity,還可以透過「Notification」來喚醒。「Notification」會在後面章節中解說。
Dead (已回收或未啟動)
「Dead」狀態是 Activity 尚未被啟動、已經被手動終止,或已經被系統回收的狀態。
要手動終止 Activity,可以在程式中呼叫「finish」函式。我們在加入選單一章中已經提到過了。
如果是被系統回收,可能是因為記憶體不足了,所以系統根據記憶體不足時的回收規則,將處於「Stopped」狀態的 Activity 所佔用的記憶體回收。
記憶體不足時,Dalvak 虛擬機會根據其記憶體回收規則來回收記憶體:
1. 先回收與其他 Activity 或 Service/Intent Receiver 無關的行程(即優先回收獨立的Activity)
2. 再回收處於「Stopped」狀態的其他類型 Activity(在背景等待的Activity)。最久沒有使用的 Activity 優先回收(比較官方的說法是 "根據 LRU 演算法...")
3. 還不夠?回收 Service 行程
4. 快不行啦,關掉可見的 Activity/行程
5. 關閉當前的 Activity
Activity 生命週期
週二, 2011-05-10 09:20
#1
Activity 生命週期