前臺(tái)進(jìn)程
這個(gè)進(jìn)程是最重要的,是最后被銷毀的。前臺(tái)進(jìn)程是目前正在屏幕上顯示的進(jìn)程和一些系統(tǒng)進(jìn)程,也就是和用戶正在交互的進(jìn)程。例如,我正在使用qq跟別人聊天,在我的Android手機(jī)上這個(gè)進(jìn)程就應(yīng)該是前臺(tái)進(jìn)程。
可見進(jìn)程
可見進(jìn)程指部分程序界面能夠被用戶看見,卻不在前臺(tái)與用戶交互的進(jìn)程。例如,我們?cè)谝粋€(gè)界面上彈出一個(gè)對(duì)話框(該對(duì)話框是一個(gè)新的Activity),那么在對(duì)話框后面的原界面是可見的,但是并沒有與用戶進(jìn)行交互,那么原界面就是可見進(jìn)程。
服務(wù)進(jìn)程
服務(wù)進(jìn)程是通過 startService() 方法啟動(dòng)的進(jìn)程,但不屬于前臺(tái)進(jìn)程和可見進(jìn)程。例如,在后臺(tái)播放音樂或者在后臺(tái)下載就是服務(wù)進(jìn)程。
后臺(tái)進(jìn)程
后臺(tái)進(jìn)程指的是目前對(duì)用戶不可見的進(jìn)程。例如我正在使用qq和別人聊天,這個(gè)時(shí)候qq是前臺(tái)進(jìn)程,但是當(dāng)我點(diǎn)擊Home鍵讓qq界面消失的時(shí)候,這個(gè)時(shí)候它就轉(zhuǎn)換成了后臺(tái)進(jìn)程。當(dāng)內(nèi)存不夠的時(shí)候,可能會(huì)將后臺(tái)進(jìn)程回收。
空進(jìn)程
空進(jìn)程指的是在這些進(jìn)程內(nèi)部,沒有任何東西在運(yùn)行。保留這種進(jìn)程的的唯一目的是用作緩存,以縮短該應(yīng)用下次在其中運(yùn)行組件所需的啟動(dòng)時(shí)間。
它們的回收順序從先到后分別是:空進(jìn)程,后臺(tái)進(jìn)程,服務(wù)進(jìn)程,可見進(jìn)程,前臺(tái)進(jìn)程。
拓展,service防殺死處理
1.使用極光推送,在推送的服務(wù)器中實(shí)現(xiàn)自己的監(jiān)聽
2.啟動(dòng)服務(wù)的方法,參數(shù)為START_STICKY,在android中,我們使用startService啟動(dòng)服務(wù)。在Service的派生類里,會(huì)調(diào)用onStartCommand(Intent,int,int)來啟動(dòng)服務(wù)。
onStartCommand有三種返回值:
START_STICKY:
使用這個(gè)返回值時(shí),我們啟動(dòng)的服務(wù)跟應(yīng)用程序"粘"在一起,如果在執(zhí)行完onStartCommand后,服務(wù)被異常kill掉,系統(tǒng)會(huì)自動(dòng)重啟該服務(wù)。當(dāng)再次啟動(dòng)服務(wù)時(shí),傳入的第一個(gè)參數(shù)將為null;
3.?startForeground,把服務(wù)啟動(dòng)成前臺(tái)服務(wù)