最近很忙氏堤,老板的需求不斷,又是獨立開發(fā)搏明,還需要兼顧其他一些事情丽猬。當(dāng)然這些都是給自己的借口。以后勤勞一點熏瞄,寫點文章也算留點念想。
因為項目實現(xiàn)了鬧鐘功能谬以,也就牽扯到了進(jìn)程鼻恳活。所謂蔽瑁活即進(jìn)程在后臺一直運行不被殺死邮丰。統(tǒng)計一下目前的保活手段:
1.監(jiān)聽系統(tǒng)廣播铭乾,如開機剪廉、充電狀態(tài)、網(wǎng)絡(luò)變化炕檩、安裝卸載app斗蒋、鎖屏解鎖、集成的推送消息等等笛质,親測無效泉沾,在進(jìn)程被殺了之后也無法再監(jiān)聽到系統(tǒng)廣播,也就不存在拉起妇押,只能作為輔助手段跷究,稍后會提起。
2.實現(xiàn)一個隱藏的前臺服務(wù)敲霍,這個網(wǎng)上很多實現(xiàn)方法俊马,也是我最開始使用的手段丁存。實際上是把進(jìn)程的優(yōu)先級給提高了一級,鎖屏?xí)r間長了還是會被殺死柴我。
3.使用Linux命令啟動一個新進(jìn)程進(jìn)行相互保護(hù)解寝。才疏學(xué)淺,并不太理解原理屯换,不敢多說编丘,詳情看這篇博客。親測無效彤悔,不敢說是大神寫的不對嘉抓,可能是我姿勢不對。
4.?使用子進(jìn)程進(jìn)行相互保護(hù)晕窑,簡而言之就是建兩個service,一個是子進(jìn)程:
android:process=":remote"
親測無效抑片,這個一點點用都沒有,因為進(jìn)程被殺了之后子進(jìn)程也同時被殺杨赤。
5.謠傳QQ曾經(jīng)讓自己不被殺死敞斋,曾使用過后臺顯示一個全透明的、只有1x1像素大小的窗口疾牲,這個很匪夷所思植捎,像IOS5之后的后臺無限播放無聲音樂一樣狗血,甚至曾經(jīng)我還嘲笑過這個做法阳柔,認(rèn)為是給開發(fā)者抹黑焰枢,擾亂環(huán)境云云。今天就打臉了舌剂,因為我今天就在生產(chǎn)環(huán)境上用了這個做法济锄。
以上所有出現(xiàn)的"被殺死"字樣全部指的是進(jìn)程后臺狀態(tài)自動被殺死,而不是指用戶手用殺死霍转,類似iphone連按兩次HOME鍵上劃殺死后臺進(jìn)程荐绝,這個只有一種辦法保證不被殺死,就是把你應(yīng)用加入到系統(tǒng)殺死進(jìn)程的白名單避消。所謂跟手機廠商合作加入白名單就是指這個低滩。這里不得不說一個很有意思的app:日程管理時間管理。它里面有引導(dǎo)用戶進(jìn)行白名單設(shè)置的操作沾谓,很有意思委造,同事讓我看的時候我只想說
??簡單說上它就是引導(dǎo)用戶手動設(shè)置了“廠商把你的app加入白名單”這個操作,這個也被我學(xué)了過去均驶,連帶著頁面一起昏兆。這只是第一步。
??接下來如我上面所說妇穴,除了4被遺棄之外爬虱,把所有的手段都用上了隶债,一開始并沒有用5,因為我感覺已經(jīng)夠了跑筝。但是依然無法阻止在鎖屏+后臺的情況下被殺死讹。于是我用上了最后一種手段。下一篇博客會詳細(xì)說明曲梗。
??最后一步赞警,我參考了360,在雙擊返回鍵后并沒有
Process.killProcess(Process.myPid());
和
System.exit(0);
而是
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
getAppContext().startActivity(intent);
并且在清單文件中加入了
android:excludeFromRecents="true"
作用是不在最近使用的列表中出現(xiàn)虏两,也就是連按兩次HOME鍵就不會出現(xiàn)我的app了愧旦。
??至此,我整個的倍ò眨活就結(jié)束了笤虫。歡迎技術(shù)討論,拍磚也請拍祖凫。