在安卓系統(tǒng)中:當系統(tǒng)內(nèi)存不足時,Android系統(tǒng)將根據(jù)進程的優(yōu)先級選擇殺死一些不太重要的進程,優(yōu)先級低的先殺死。進程優(yōu)先級從高到低如下:
前臺進程
- 處于正在與用戶交互的activity
- 與前臺activity綁定的service
- 調(diào)用了startForeground()方法的service
- 正在執(zhí)行oncreat(),onstart(),ondestroy方法的 service。
- 進程中包含正在執(zhí)行onReceive()方法的BroadcastReceiver。
系統(tǒng)中的前臺進程并不會很多,而且一般前臺進程都不會因為內(nèi)存不足被殺死。特殊情況除外。當內(nèi)存低到無法保證所有的前臺進程同時運行時,才會選擇殺死某個進程。
可視進程
- 為處于前臺,但仍然可見的activity(例如:調(diào)用了onpause()而還沒調(diào)用onstop()的activity)。典型情況是:運行activity時,彈出對話框(dialog等),此時的activity雖然不是前臺activity,但是仍然可見。
- 可見activity綁定的service。(處于上訴情況下的activity所綁定的service)
可視進程一般也不會被系統(tǒng)殺死,除非為了保證前臺進程的運行不得已而為之。
服務(wù)進程
- 已經(jīng)啟動的service
后臺進程
- 不可見的activity(調(diào)用onstop()之后的activity)
后臺進程不會影響用戶的體驗,為了保證前臺進程,可視進程,服務(wù)進程的運行,系統(tǒng)隨時有可能殺死一個后臺進程。當一個正確實現(xiàn)了生命周期的activity處于后臺被殺死時,如果用戶重新啟動,會恢復(fù)之前的運行狀態(tài)。
空進程
- 任何沒有活動的進程
系統(tǒng)會殺死空進程,但這不會造成影響??者M程的存在無非為了一些緩存,以便于下次可以更快的啟動。