1福压、前臺進(jìn)程(Foreground Process)
用戶當(dāng)前工作所需要的眉撵。一個進(jìn)程如果滿足下列任何條件被認(rèn)為是前臺進(jìn)程:
- 正運(yùn)行著一個正在與用戶交互的活動(Activity對象的onResume()方法已經(jīng)被調(diào)用)
- 寄宿了一個服務(wù)奈附,該服務(wù)與一個用戶交互的活動綁定筷弦。
- 有一個Service對象執(zhí)行它的生命周期回調(diào)(onCreate()杭朱、onStart()饱须、onDestory())域醇。
- 有一個BroadcastReceiver對象執(zhí)行它的onReceive()方法
在給定的時間內(nèi)僅有少數(shù)的前臺進(jìn)程存在。僅作為最后采取的措施他們才會被殺掉——如果內(nèi)存太低以至于它們不能繼續(xù)運(yùn)行蓉媳。
2譬挚、可視進(jìn)程(Visible Process)
沒有任何前臺組件,但是仍然能影響用戶在屏幕上看到東西酪呻。一個進(jìn)程滿足下面任何一個條件都被認(rèn)為是可視的:
- 寄宿著一個不是前臺的Activity减宣,但是它對用戶仍可見(它的onPause()方法已經(jīng)被調(diào)用)。舉例來說玩荠,這可能發(fā)生在漆腌,如果一個前臺Activity在一個對話框(其他進(jìn)程的)運(yùn)行之后仍然是可視的,比如輸入法的彈出時阶冈。
- 寄宿著一個服務(wù)闷尿,該服務(wù)綁定到一個可視的Activity
一個可視進(jìn)程被認(rèn)為是及其重要的且不會被殺死,除非為了保持前臺進(jìn)程而運(yùn)行眼溶。
3悠砚、服務(wù)進(jìn)程(Service Process)
一個運(yùn)行著一個用startService()方法啟動的服務(wù),并且該服務(wù)并沒有落入上面2種分類堂飞。雖然服務(wù)進(jìn)程沒有直接關(guān)系到任何用戶可見的灌旧,它們通常做用戶關(guān)心的事(諸如在后臺播放mp3或者從網(wǎng)絡(luò)下載數(shù)據(jù))绑咱,因此系統(tǒng)保持他們運(yùn)行,除非沒有足夠內(nèi)存來保證所有的前臺進(jìn)程和可視進(jìn)程枢泰。
4描融、后臺進(jìn)程(Background Process)
一個保持著一個當(dāng)前對用戶不可見的Activity(已經(jīng)調(diào)用Activity對象的onStop()方法)(如果還有除了UI線程外其他線程在運(yùn)行的話,不受影響)衡蚂。這些進(jìn)程沒有直接影響用戶體驗(yàn)窿克,并且可以在任何時候被殺以回收內(nèi)存用于一個前臺、可視毛甲、服務(wù)進(jìn)程年叮。一般地有很多后臺進(jìn)程運(yùn)行著,因此它們保持在一個LRU(Least Recently Used玻募,即最近最少使用)列表只损,以確保最近使用最多的活動的進(jìn)程最后被殺。
5七咧、空進(jìn)程(Empty Process)
是一個沒有保持活躍的應(yīng)用程序組件的進(jìn)程跃惫。保持這個進(jìn)程可用的唯一原因是作為一個cache以提高下次啟動組件的速度。系統(tǒng)進(jìn)程殺死這些進(jìn)程艾栋,以在進(jìn)程cache和潛在的內(nèi)核cache之間平衡整個系統(tǒng)資源爆存。
一個進(jìn)程的排名因?yàn)槠渌M(jìn)程依賴它而上升。一個進(jìn)程服務(wù)其他進(jìn)程蝗砾,它的排名從不會比其他服務(wù)的進(jìn)程低先较。例如,進(jìn)程A中的一個內(nèi)容提供者服務(wù)進(jìn)程B中的一個客戶遥诉,或者進(jìn)程A中的一個服務(wù)綁定到進(jìn)程B中的一個組件拇泣,進(jìn)程A總是被認(rèn)為比進(jìn)程B重要。