標籤:
在安卓中,一共分為五種狀態的進程:分別為activityprocess,visibleprocess,backgroundprocess,startedserviceprogress,backgroundprocess,emptyprocess,這五種狀態,他們的優先等級由上至下:
一、這裡的ActiveProcess這個進程狀態的進程此時正處於活躍的狀態,使用者可以和它進行互動,可以說,此時進程正在運行,而且可以收到來自外界的訊息。
二、VisibleProcess,這個進程是可見的進程,但此時的進程已經失去了與使用者之間的互動的能力,也就是說大概是這種情況,當有一個彈出框出現在當前的窗檯上,我們此時無法正常點擊後邊的表單裡的控制項,但是我們又能明顯的看到後邊的表單,這個時候進程就處於這個狀態。
三、StartServiceProcess這個進程根據意思翻譯過來就是開啟Service服務進程,我們都知道Service進程我們是看不到的,但他確實在運行,這種進程的狀態就是這樣的,比剛才的VisibleProcess相比,他又失去了介面。
四、BackgroundProcess這個進程稱之為後台進程,他和StartServiceProcess的區別在於有沒有服務,對於background這個後台進程來說,已經沒有了服務,而startServiceProcess這個進程是有服務的,差在了這裡。
五、最後一個emptyProcess,這個就變成了空進程,空進程就更加悲哀了,他不但沒有了服務。可以說他就剩下一台虛擬機器了,對於安卓每個程式來說,這是標配,他就剩下這層了,當然他在等待有人再來召喚,這樣他就可以以很快的速度恢複過來。
以下是狀態轉換的過程:
這個是金字塔形的生命週期:
視頻裡還介紹了當有人按下home鍵或者返回鍵後進程的情況,結果顯示,兩次的進程都沒有被銷毀,哪怕是調用finish函數,依舊沒有銷毀進程,當然根據安卓虛擬機器的記憶體回收機制,如果趕上當前資源匱乏,可能就要犧牲這個進程,因為當前來說,這個進程是優先順序最低的,想要徹底銷毀掉進程,有兩個辦法:
一、System.exit(0);
二、Process.killProcess(PID);
這種人為關閉和系統資源匱乏關閉進程的效果來後邊會有一些不同:如果activity是自己銷毀的,執行個體就永遠消失了,但是如果系統因為資源限制銷毀了activity,雖然這個執行個體已經不在了,但是當使用者返回到它時,系統會利用這個activity被銷毀時儲存的資料,重新建立一個執行個體。
這句話是我在別人的部落格裡看到的,感覺很重要,同時我還看到:
安卓進程的生命週期