在默認情況下,每個應用均運行在其獨自擁有的Linux進程中,而每個進程擁有一個唯一的Java虛擬機(Dalvik)和一個唯一的Linux用戶ID。在Android中,進程還引入了嚴格的權限機制,在默認情況下,應用的文件僅對應用本身可視。
如果設置兩個應用擁有共同的Linux用戶ID,應用間將具有互視性,同時會共享Linux進程和Dalvik虛擬機,這在系統(tǒng)資源緊張時,是個不錯的節(jié)省系統(tǒng)資源的方式。
在Android中,根據(jù)進程中運行的組件,以及組件的狀態(tài)將進程分為5類:前臺進程(foreground process)、可視進程(visible process)、服務進程(service process)、后臺進程(background process)、空進程(empty process)。在系統(tǒng)運行過程中,如果系統(tǒng)內存不足,Android將會按照進程當前的狀態(tài)決定哪個進程被殺死。
1)前臺進程
當一個進程出現(xiàn)如下場景時,該進程被稱為前臺進程。場景包括:
正在運行一個與用戶交互的Activity。
駐留了一個與用戶交互的Activity相綁定的服務。
擁有一個正在執(zhí)行生命周期調用(onCreate(),onStart()、onDestroy())的服務對象。
擁有一個正在執(zhí)行onReceive()方法的廣播接收器對象。
2)可視進程
當一個進程沒有包含任何前臺組件,但對用戶視覺有影響時,該進程被稱為可視進程。這類進程的典型場景包括彈出窗口隱藏的全屏窗口等。另外駐留了與處于“paused”狀態(tài)的Activity綁定的服務進程也屬于這類進程。
3)服務進程
當進程中駐留了一個服務組件時,該進程稱為服務進程,除非系統(tǒng)已經沒有足夠的內存去運行前臺進程和可視進程,否則服務進程將一直在系統(tǒng)中保持運行。這類進程的典型場景如Mp3的后臺播放。
4)后臺進程
當進程的所有Activity對用戶而言均不可見時,對用戶體驗來說沒有直接的影響,這些進程稱為后臺進程。為了滿足更重要的進程的資源需求,后臺進程可能會被系統(tǒng)殺死。
5)空進程
當一個進程沒有駐留任何激活的應用組件時,該進程稱為空進程,這類進程仍存在于系統(tǒng)中的原因是,作為緩沖可以提高進程的下次啟動時間。但為了保證系統(tǒng)的正常運行,當系統(tǒng)資源瀕臨不足時,Android常會選擇殺死這類進程。