最近很忙,老板的需求不斷,又是獨(dú)立開(kāi)發(fā),還需要兼顧其他一些事情。當(dāng)然這些都是給自己的借口。以后勤勞一點(diǎn),寫(xiě)點(diǎn)文章也算留點(diǎn)念想。
因?yàn)轫?xiàng)目實(shí)現(xiàn)了鬧鐘功能,也就牽扯到了進(jìn)程保活。所謂保活即進(jìn)程在后臺(tái)一直運(yùn)行不被殺死。統(tǒng)計(jì)一下目前的保活手段:
1.監(jiān)聽(tīng)系統(tǒng)廣播,如開(kāi)機(jī)、充電狀態(tài)、網(wǎng)絡(luò)變化、安裝卸載app、鎖屏解鎖、集成的推送消息等等,親測(cè)無(wú)效,在進(jìn)程被殺了之后也無(wú)法再監(jiān)聽(tīng)到系統(tǒng)廣播,也就不存在拉起,只能作為輔助手段,稍后會(huì)提起。
2.實(shí)現(xiàn)一個(gè)隱藏的前臺(tái)服務(wù),這個(gè)網(wǎng)上很多實(shí)現(xiàn)方法,也是我最開(kāi)始使用的手段。實(shí)際上是把進(jìn)程的優(yōu)先級(jí)給提高了一級(jí),鎖屏?xí)r間長(zhǎng)了還是會(huì)被殺死。
3.使用Linux命令啟動(dòng)一個(gè)新進(jìn)程進(jìn)行相互保護(hù)。才疏學(xué)淺,并不太理解原理,不敢多說(shuō),詳情看這篇博客。親測(cè)無(wú)效,不敢說(shuō)是大神寫(xiě)的不對(duì),可能是我姿勢(shì)不對(duì)。
4.?使用子進(jìn)程進(jìn)行相互保護(hù),簡(jiǎn)而言之就是建兩個(gè)service,一個(gè)是子進(jìn)程:
android:process=":remote"
親測(cè)無(wú)效,這個(gè)一點(diǎn)點(diǎn)用都沒(méi)有,因?yàn)檫M(jìn)程被殺了之后子進(jìn)程也同時(shí)被殺。
5.謠傳QQ曾經(jīng)讓自己不被殺死,曾使用過(guò)后臺(tái)顯示一個(gè)全透明的、只有1x1像素大小的窗口,這個(gè)很匪夷所思,像IOS5之后的后臺(tái)無(wú)限播放無(wú)聲音樂(lè)一樣狗血,甚至曾經(jīng)我還嘲笑過(guò)這個(gè)做法,認(rèn)為是給開(kāi)發(fā)者抹黑,擾亂環(huán)境云云。今天就打臉了,因?yàn)槲医裉炀驮谏a(chǎn)環(huán)境上用了這個(gè)做法。
以上所有出現(xiàn)的"被殺死"字樣全部指的是進(jìn)程后臺(tái)狀態(tài)自動(dòng)被殺死,而不是指用戶(hù)手用殺死,類(lèi)似iphone連按兩次HOME鍵上劃殺死后臺(tái)進(jìn)程,這個(gè)只有一種辦法保證不被殺死,就是把你應(yīng)用加入到系統(tǒng)殺死進(jìn)程的白名單。所謂跟手機(jī)廠商合作加入白名單就是指這個(gè)。這里不得不說(shuō)一個(gè)很有意思的app:日程管理時(shí)間管理。它里面有引導(dǎo)用戶(hù)進(jìn)行白名單設(shè)置的操作,很有意思,同事讓我看的時(shí)候我只想說(shuō)

??簡(jiǎn)單說(shuō)上它就是引導(dǎo)用戶(hù)手動(dòng)設(shè)置了“廠商把你的app加入白名單”這個(gè)操作,這個(gè)也被我學(xué)了過(guò)去,連帶著頁(yè)面一起。這只是第一步。
??接下來(lái)如我上面所說(shuō),除了4被遺棄之外,把所有的手段都用上了,一開(kāi)始并沒(méi)有用5,因?yàn)槲腋杏X(jué)已經(jīng)夠了。但是依然無(wú)法阻止在鎖屏+后臺(tái)的情況下被殺。于是我用上了最后一種手段。下一篇博客會(huì)詳細(xì)說(shuō)明。
??最后一步,我參考了360,在雙擊返回鍵后并沒(méi)有
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鍵就不會(huì)出現(xiàn)我的app了。
??至此,我整個(gè)的?;罹徒Y(jié)束了。歡迎技術(shù)討論,拍磚也請(qǐng)拍。