在Android中,多數(shù)情況下每個(gè)程序都是在各自獨(dú)立的Linux進(jìn)程中運(yùn)行的。當(dāng)一個(gè)程序或其某些部分被請(qǐng)求時(shí),它的進(jìn)程就“出生”了;當(dāng)這個(gè)程序沒有必要再運(yùn)行下去且系統(tǒng)需要回收這個(gè)進(jìn)程的內(nèi)存用于其他程序時(shí),這個(gè)進(jìn)程就“死亡”了。可以看出,Android程序的生命周期是由系統(tǒng)控制而非程序自身直接控制。這和編寫桌面應(yīng)用程序時(shí)的思維有一些不同,一個(gè)桌面應(yīng)用程序的進(jìn)程也是在其他進(jìn)程或用戶請(qǐng)求時(shí)被創(chuàng)建,但是往往是在程序自身收到關(guān)閉請(qǐng)求后執(zhí)行一個(gè)特定的動(dòng)作(如從main方法中 return)而導(dǎo)致進(jìn)程結(jié)束的。
簡而言之,程序的生命周期是在Android系統(tǒng)中進(jìn)程從啟動(dòng)到終止的所有階段,也就是Android程序啟動(dòng)到停止的全過程,程序的生命周期是由Android系統(tǒng)進(jìn)行調(diào)度和控制的。
但是,一個(gè)不容忽視的問題就是,手機(jī)的內(nèi)存是有限的,隨著打開的應(yīng)用程序數(shù)量的增多,隨之而來的可能會(huì)是應(yīng)用程序響應(yīng)時(shí)間過長或者系統(tǒng)假死的糟糕情況。所以,若將Android應(yīng)用程序生命周期交由系統(tǒng)處理的話,那么在系統(tǒng)內(nèi)存不足的情況下,便由Android系統(tǒng)舍車保帥,選擇性地來終止一些重要性較次的應(yīng)用程序,以便回收內(nèi)存供更重要的應(yīng)用程序使用。
那么,系統(tǒng)是根據(jù)一個(gè)什么樣的重要性標(biāo)準(zhǔn)來終止Android應(yīng)用程序的呢?Android根據(jù)應(yīng)用程序的組件及組件當(dāng)前運(yùn)行狀態(tài)將所有的進(jìn)程按重要性程度從高到低劃分了五個(gè)優(yōu)先級(jí):前臺(tái)進(jìn)程、可見進(jìn)程、服務(wù)進(jìn)程、后臺(tái)進(jìn)程、空進(jìn)程。以下就按優(yōu)先級(jí)由高到低的順序介紹Android系統(tǒng)中的進(jìn)程。(推薦閱讀:Android進(jìn)程的生命周期)
1.前臺(tái)進(jìn)程
前臺(tái)進(jìn)程是顯示在屏幕前端并與用戶正在交互的進(jìn)程,是Android系統(tǒng)中重要的進(jìn)程,包含以下4種情況。
●進(jìn)程中的Activity正在與用戶進(jìn)行交互。
●進(jìn)程服務(wù)被Activity調(diào)用,而且這個(gè)Activity正在與用戶進(jìn)行交互。
●進(jìn)程服務(wù)正在執(zhí)行聲明周期中的回調(diào)方法,如onCreate()、onStart()或onDestroy()
●進(jìn)程的BroadcastReceiver正在執(zhí)行onReceive()方法。
Android系統(tǒng)在多個(gè)前臺(tái)進(jìn)程同時(shí)運(yùn)行時(shí),可能會(huì)出現(xiàn)資源不足的情況,此時(shí)會(huì)清除部分前臺(tái)進(jìn)程,保證主要的用戶界面能夠及時(shí)響應(yīng)。
2.可見進(jìn)程
可見進(jìn)程指部分程序界面能夠被用戶看見,卻不在前臺(tái)與用戶交互,不響應(yīng)界面事件(其onPause()方法已被調(diào)用)的進(jìn)程。如果一個(gè)進(jìn)程包含服務(wù),且這個(gè)服務(wù)正在被用戶可見的Activity調(diào)用,此進(jìn)程同樣被視為可見進(jìn)程。
Android系統(tǒng)一般存在少量的可見進(jìn)程,只有在特殊的情況下,Android系統(tǒng)才會(huì)為保證前臺(tái)進(jìn)程的資源而清除可見進(jìn)程。
3.服務(wù)進(jìn)程
服務(wù)進(jìn)程是指包含由startService()方法啟動(dòng)服務(wù)的進(jìn)程。它有以下特性:沒有用戶界面;在后臺(tái)長期運(yùn)行。例如,后臺(tái)MP3播放器或后臺(tái)上傳下載數(shù)據(jù)的網(wǎng)絡(luò)服務(wù)。
Android系統(tǒng)除非不能保證前臺(tái)進(jìn)程或可見進(jìn)程所必要的資源,否則不強(qiáng)行清除服務(wù)進(jìn)程。
4.后臺(tái)進(jìn)程
后臺(tái)進(jìn)程是指不包含任何已經(jīng)啟動(dòng)的服務(wù),而且沒有任何用戶可見的Activity的進(jìn)程。這些進(jìn)程不直接影響用戶的體驗(yàn)。
Android系統(tǒng)中一般存在數(shù)量較多的后臺(tái)進(jìn)程,因此這些進(jìn)程會(huì)被保存在一個(gè)列表中,以保證在系統(tǒng)資源緊張時(shí),系統(tǒng)將優(yōu)先清除用戶較長時(shí)間沒有見到的后臺(tái)進(jìn)程。
5.空進(jìn)程
空進(jìn)程是不包含任何活躍組件的進(jìn)程。一般保留這些進(jìn)程,是為了將其作為一個(gè)緩存,在它所屬的應(yīng)用組件下一次需要時(shí),縮短啟動(dòng)的時(shí)間。
空進(jìn)程在系統(tǒng)資源緊張時(shí)會(huì)被首先清除,但為了提高Android系統(tǒng)應(yīng)用程序的啟動(dòng)速度,Android系統(tǒng)會(huì)將空進(jìn)程保存在系統(tǒng)內(nèi)存中,在用戶重新啟動(dòng)該程序時(shí),空進(jìn)程會(huì)被重新使用。