Android 的虛擬機(VM)執(zhí)行Activity時主要有四種狀態(tài): · Active (活動) · Paused (暫停) · Stopped (停止) · Dead (已回收或未啟動) 「Active」狀態(tài)是使用者啟動應用程式或Activity 后,Activity 運行中的狀態(tài)。 在Android 平臺上,同一個時刻只會有一個Activity 處于活動(Active)或運行(R??unning)狀態(tài)。 其他的Activity 都處于未啟動(Dead)、停止(Stopped)、或是暫停(Pause)的狀態(tài)。 「Paused」狀態(tài)是當Activity 暫時暗下來,退到背景畫面的狀態(tài)。 當我們使用Toast、 AlertDialog 、或是電話來了時,都會讓原本運行的Activity退到背景畫面。 新出現(xiàn)的Toast、 AlertDialog等介面元件蓋住了原來的Activity畫面。 Activity 處在「Paused」狀態(tài)時,使用者無法與原Activity 互動。 「Stopped」狀態(tài)是有其他Activity 正在執(zhí)行,而這個Activity 已經(jīng)離開螢幕,不再動作的狀態(tài)。 透過長按「Home」鈕,可以叫出所有處于「Stopped」狀態(tài)的應用程式列表。 在「Stopped」狀態(tài)的Activity,還可以透過「Notification」來喚醒。 「Notification」會在后面章節(jié)中解說。 「Dead」狀態(tài)是Activity 尚未被啟動、已經(jīng)被手動終止,或已經(jīng)被系統(tǒng)回收的狀態(tài)。 要手動終止Activity,可以在程式中呼叫「finish」函式。 我們在加入選單一章中已經(jīng)提到過了。 如果是被系統(tǒng)回收,可能是因為記憶體不足了,所以系統(tǒng)根據(jù)記憶體不足時的回收規(guī)則,將處于「Stopped」狀態(tài)的Activity 所占用的記憶體回收。 記憶體不足時,Dalvik 虛擬機會根據(jù)其記憶體回收規(guī)則來回收記憶體: 1 先回收與其他Activity 或Service/Intent Receiver 無關的行程(即優(yōu)先回收獨立的Activity) 2 再回收處于「Stopped」狀態(tài)的其他類型Activity(在背景等待的Activity)。 最久沒有使用的Activity 優(yōu)先回收(比較官方的說法是"根據(jù)LRU 演算法...") 3 還不夠? 回收Service 行程 4 快不行啦,關掉可見的Activity/行程 5 關閉當前的Activity 當系統(tǒng)缺記憶體缺到開始「4. 關掉可見的Activity/行程」時,大概我們換機子的時機也早該到啦! onCreate(),onStart(),onResume(),onPause(),onStop(),onRestart(),onDestroy() 上面的七個狀態(tài)又可以歸納成三組: 1. 資源分配(Create/Destroy) 完整的Activity 生命周期由「Create」狀態(tài)開始,由「Destroy」狀態(tài)結束。 建立(Create)時分配資源,銷毀(Destroy)時釋放資源。 2. 可見與不可見(Start/ReStart/Stop) 當Activity 運行到「Start」狀態(tài)時,就可以在螢幕上看到這個Activity。 相反地??,當Activity 運行到「Stop」狀態(tài)時,這個Activity 就會從螢幕上消失。 當使用者按下Back 按鈕回到上一個Activity 時,會先到Restart 狀態(tài),再到一般的Start 狀態(tài)。 3. 使用者能否直接存取螢幕(Resume/Pause) 當有個Toast、 AlertDialog 、簡訊、電話等訊息亂入時,原來的Activity會進入「Pause」狀態(tài),暫時放棄直接存取螢幕的能力,被中斷到背景去,將前景交給優(yōu)先級高的事件。 當這些優(yōu)先級高的事件處理完后,Activity 就改進入「Resume」狀態(tài),此時又直接存取螢幕。 由實際運行的記錄來看,我們可以歸納出所有Android 應用程式都遵循的動作流程: onCreate -> onStart -> onResume 啟動一個Activity 的基本流程是:分配資源給這個Activity(Create 狀態(tài)),然后將Activity 內(nèi)容顯示到螢幕上(Start 狀態(tài))。 在一切就緒后,取得螢幕的控制權(Resume 狀態(tài)),使用者可以開始使用這個程式。 onPause(1) -> onCreate(2) -> onStart(2) - onResume(2) -> onStop(1) 這是個先凍結原本的Activity,再交出直接存取螢幕能力(Pause 狀態(tài))的過程。 直到Activity 2 完成一般啟動流程后,Activity 1 才會被停止。 onPause(2) -> onRestart(1) -> onStart(1) -> onResume(1) -> onStop(2) -> onDestroy(2) 點Back 按鈕可以回到原本的Activity。 onPause -> onStop -> onDestroy 如果程式中有直接呼叫「finish」函式來關閉Activity的話,系統(tǒng)假設我們很確定我們在做什么,因此會直接跳過先凍結(Freeze)的階段,暫停(Pause),停止(Stop),然后銷毀(Destroy)。 onCreate -> onStart -> onResume
|
|