Service
service:是一個(gè)后臺(tái)服務(wù)泊藕,專門用來處理常駐后臺(tái)的工作的組件。
即時(shí)通訊:service來做常駐后臺(tái)的心跳傳輸难礼。
1.良民:核心服務(wù)盡可能地輕M拊病C捣妗!
很多人喜歡把所有的后臺(tái)操作都集中在一個(gè)service里面讼呢。
為核心服務(wù)專門做一個(gè)進(jìn)程撩鹿,跟其他的所有后臺(tái)操作隔離。
樹大招風(fēng)悦屏,核心服務(wù)千萬要輕三痰。
一、優(yōu)先級(jí)
進(jìn)程的重要性優(yōu)先級(jí):(越往后的就越容易被系統(tǒng)殺死)
1.前臺(tái)進(jìn)程窜管;Foreground process
1)用戶正在交互的Activity(onResume())
2)當(dāng)某個(gè)Service綁定正在交互的Activity散劫。
3)被主動(dòng)調(diào)用為前臺(tái)Service(startForeground())
4)組件正在執(zhí)行生命周期的回調(diào)(onCreate()/onStart()/onDestroy())
5)BroadcastReceiver 正在執(zhí)行onReceive();
2.可見進(jìn)程;Visible process
1)我們的Activity處在onPause()(沒有進(jìn)入onStop())
2)綁定到前臺(tái)Activity的Service幕帆。
3.服務(wù)進(jìn)程获搏;Service process
簡單的startService()啟動(dòng)。
4.后臺(tái)進(jìn)程失乾;Background process
對(duì)用戶沒有直接影響的進(jìn)程----Activity出于onStop()的時(shí)候常熙。
android:process=":xxx"
5.空進(jìn)程; Empty process
不含有任何的活動(dòng)的組件碱茁。(android設(shè)計(jì)的裸卫,為了第二次啟動(dòng)更快,采取的一個(gè)權(quán)衡)
二纽竣、如何提升進(jìn)程的優(yōu)先級(jí)(盡量做到不輕易被系統(tǒng)殺死)
1.QQ采取在鎖屏的時(shí)候啟動(dòng)一個(gè)1個(gè)像素的Activity墓贿,當(dāng)用戶解鎖以后將這個(gè)Activity結(jié)束掉(順便同時(shí)把自己的核心服務(wù)再開啟一次)。被用戶發(fā)現(xiàn)了就不好了蜓氨。
背景:當(dāng)手機(jī)鎖屏的時(shí)候什么都干死了聋袋,為了省電。
鎖屏界面在上面蓋住了穴吹。
監(jiān)聽鎖屏廣播幽勒,鎖了---啟動(dòng)這個(gè)Activity。
監(jiān)聽鎖屏的港令, 開啟---結(jié)束掉這個(gè)Activity啥容。
要監(jiān)聽鎖屏的廣播---動(dòng)態(tài)注冊。
ScreenListener.begin(new xxxListener
onScreenOff()
);
被系統(tǒng)無法殺死的進(jìn)程顷霹。
2.app運(yùn)營商和手機(jī)廠商可能有合作關(guān)系---白名單咪惠。
3.雙進(jìn)程守護(hù)---可以防止單個(gè)進(jìn)程殺死,同時(shí)可以防止第三方的360清理掉泼返。
一個(gè)進(jìn)程被殺死硝逢,另外一個(gè)進(jìn)程又被他啟動(dòng)。相互監(jiān)聽啟動(dòng)。
A<--->B
殺進(jìn)程是一個(gè)一個(gè)殺的渠鸽。本質(zhì)是和殺進(jìn)程時(shí)間賽跑叫乌。
4.JobScheduler
把任務(wù)加到系統(tǒng)調(diào)度隊(duì)列中,當(dāng)?shù)竭_(dá)任務(wù)窗口期的時(shí)候就會(huì)執(zhí)行徽缚,我們可以在這個(gè)任務(wù)里面啟動(dòng)我們的進(jìn)程憨奸。
這樣可以做到將近殺不死的進(jìn)程。
5.監(jiān)聽QQ,微信凿试,系統(tǒng)應(yīng)用排宰,友盟,小米推送等等的廣播那婉,然后把自己啟動(dòng)了板甘。
6.利用賬號(hào)同步機(jī)制喚醒我們的進(jìn)程
AccountManager
7.NDK來解決,Native進(jìn)程來實(shí)現(xiàn)雙進(jìn)程守護(hù)