Android 進(jìn)程的 優(yōu)先級
- 前臺進(jìn)程
正在和用戶交互 的act,前臺運(yùn)行的service歌懒,廣播接受者的 onRecive 方法也是屬于前臺進(jìn)程 - 可見進(jìn)程
沒有任何前臺組件,但還是會影響用戶屏幕上所見內(nèi)容 - 服務(wù)進(jìn)程
就是service溯壶,優(yōu)先級比較高及皂, 所以經(jīng)常要注意service - 后臺進(jìn)程
- 空 進(jìn)程
就是為了一個(gè)平衡甫男,緩沖
Android 進(jìn)程的回收策略
1 Low memory killer,其實(shí)是根據(jù) Linux 的 oom 機(jī)制改過來的躲庄,oom 的比較復(fù)雜的平衡機(jī)制查剖,會對進(jìn)程的優(yōu)先級進(jìn)行打分,然后將分?jǐn)?shù)高的進(jìn)程視為bad 進(jìn)程噪窘,殺死它笋庄,并釋放內(nèi)存。
而不同的是倔监,oom 是在內(nèi)存不足的時(shí)候采取檢查直砂,而 low memory killer 是 定時(shí)去檢查
- OOM_ODJ 判別進(jìn)程的優(yōu)先級。
進(jìn)程焙葡埃活方案
利用系統(tǒng)廣播拉活
在發(fā)生系統(tǒng)事件的時(shí)候静暂,系統(tǒng)會發(fā)出相應(yīng)的廣播,我們可以注冊這個(gè)廣播監(jiān)聽器谱秽,比如 開機(jī)啊洽蛀,文件的卸載啊
不好 知道這個(gè)監(jiān)聽
利用系統(tǒng) Service 機(jī)制拉活
service 中有個(gè)onstartcommand 方法,把返回值 設(shè)為 start stikey疟赊,他以為因?yàn)閮?nèi)寸不足被系統(tǒng)殺掉后郊供,在內(nèi)存足的時(shí)候,系統(tǒng)會嘗試創(chuàng)建這個(gè) service近哟。
第一次 10秒驮审,第二次 20 秒。超過 三次吉执,不再拉活
root 后還是可以直接殺掉的
利用Native 進(jìn)程拉活
主要用的Linux 中的fork 機(jī)制創(chuàng)建一個(gè) native 進(jìn)程疯淫,而這個(gè)native 進(jìn)程去監(jiān)控主進(jìn)程的存活,當(dāng)主進(jìn)程掛掉之后戳玫,由于native 進(jìn)程活著熙掺,可以去拉活。
用的Android 的 ActivityMangerSerive 來管理咕宿。
5.0 之后 又被限制了
如何監(jiān)聽呢币绩? 可以輪詢 死循環(huán) 監(jiān)聽
可以去訪問某個(gè)主進(jìn)程文件 的鎖,如果獲得了鎖荠列,說明 主進(jìn)程掛了。
如何拉活载城,AM 命令
利用JobScheduler 機(jī)制拉活肌似。
上個(gè) 5.0 之后 限制了,但是提供了這個(gè)诉瓦,可以想辦法
利用賬號同步機(jī)制拉活
會定期同步賬號川队,利用這個(gè)機(jī)制力细,但是 好像也不生效了。