Android進程保活方案

你們是否是常常被產品小姐姐問到進程保活問題,若是你說實現不了小姐姐立刻就要懟你了,那人家微信是怎麼作到的。面對這種狀況咱們機智的程序員固然要自告奮勇一套一套先把她說愣,而後再把小姐姐抱回家今後過上xing福的生活。程序員

OK,空口無憑,目標有了說幹就幹,接下來咱們來分析一下怎麼作到。咱們知道一個service以start的方式開啓的話是不會受activity生命週期影響的,也就是說咱們只要提高service優先級爲前臺進程按理說就能保活了啊,程序員A笑了笑,這個不要太簡單,我先來試試,因而程序員A啪啪啪的三分鐘代碼就寫好了,代碼以下:微信

小組成員紛紛帶着疑問的眼神盯着小A的pixel手機看,產品小姐姐露出了崇拜的眼神,看着ide不光在按返回鍵退出的時候打着Log,就連手動清除進程的時候Log都在,小姐姐感受本身戀愛了,慢慢地往程序員A身上靠去。這時候程序員B及時制止,可否拿我手機試試?小B掏出了他的小米手機,程序一跑起來小B就手動殺了下進程,Log瞬間中止了。。。嘴角露出了一絲得意的微笑,小樣,就你這技術還想抱得美人歸?小B立馬搶風頭擋住小姐姐解釋道:只有部分系統好比谷歌原生的系統這樣作才能作到前臺進程不會被清理掉,對於國產系統來講,早就對這個方式進行了限制。小姐姐嬌弱地問到,那應該怎麼辦呢。小B知道本身不是徹底有信心,可是也只能硬着頭皮上了,畢竟小姐姐那麼看好本身,不能讓人家失望,就算顏面掃地也要賭一把。小B略做思考,回憶了一遍最開始學習Android的時候廣播方面的知識,廣播是獨立於context存在的一個神奇物種,瞬間一絲白光閃過,小B優(bi)雅(shi)地推開小A,說讓我來試試吧,啪啦啪啦三分鐘寫完,小B的代碼以下:
ide

小組成員紛紛朝小B代碼看去,噢,原來小B是利用了進程被殺了廣播還能開啓的特性,在進程被殺之後開啓了廣播,而後廣播又打開了service,這樣確實有必定可行性。小B將程序一運行ide裏就開始打log,而後小B深呼吸了一口氣,將進程殺掉,奇蹟出現了,ide裏竟然還在打Log!這說明了什麼,說明了小B作到了在用戶在任務欄清除應用之後進程仍然存在。小姐姐緊張得不行,眼看着就要倒小B身上了。說時遲那時快,小C攔在了小B前面,說到,那若是用戶從設置裏強制殺掉進程呢,你這進程還能活着麼?人家微信能夠作到了就算你在設置裏殺掉了進程依然能存活,你殺一個試試?小B有些擔憂可是也只能厚着臉皮試試了,他有氣無力地進了設置裏強制把進程一殺,果真log中止了,中止了。。。學習

這個時候小C首先解釋了一番,說咱們能夠利用雙進程保活機制,用戶每次只能殺掉一個進程,咱們在用戶殺掉其中一個的時候咱們利用另外一個進程來打開剛剛被殺掉的進程,這樣就能作到進程保活了。小C說完新建了2個service,而後指定其中一個service在新開的進程中運行,將2個service互相綁定,最後加上系統的定時器JobService,每過100ms檢查咱們的本地和遠程服務是否已開啓,若是沒有開啓的話從新打開進程,小C的核心代碼以下:3d

代碼運行起來之後,不管是調出應用管理來清除應用仍是進入設置強制結束進程,那2個辛勤的service依然堅挺着,最終小C抱走產品小姐姐走向了人生巔峯。cdn

但其實仍是有不少限制的,首先JobService要求API>21,即5.0以上的手機纔可使用,其次各手機廠商對系統的修改程度不盡相同,致使有些手機上不是那麼好用也是可能的。進程保活確定是系統想避免的,因此之後確定會愈來愈難,若是不是特別有這種需求仍是不要去嘗試,由於得不到大廠的支持就意味着產品的不穩定。再說咱們也不但願安卓手機愈來愈卡,這對咱們用戶和開發者來講都未必是好事。blog

最後:除了雙進程守護的方式,若是你們有用過其餘的更好的進程保活的方式,歡迎一塊兒探討!
生命週期

相關文章
相關標籤/搜索