對于蹦喑活目前的需求:
? ? ? ?對于很多場景用戶都需要應(yīng)用在后臺長時間的運行,但是Android系統(tǒng)會存在殺后臺進程的情況琅翻,并且隨著系統(tǒng)版本的更新位仁,殺進程的力度還有越來越大的趨勢柑贞,系統(tǒng)這種做法本身出發(fā)點是好的,因為可以節(jié)省內(nèi)存聂抢,降低功耗钧嘶,也避免了一些流氓行為。當(dāng)遇到需要在后臺運行的場景琳疏,用戶也是愿意讓它在后臺運行的有决,比如跑步類應(yīng)用,硬件長連類應(yīng)用等空盼。一方面流氓軟件用各種流氓手段進行笔槟唬活,另一方面系統(tǒng)加大殺后臺的力度揽趾,導(dǎo)致我們一些真正需要在后臺運行的應(yīng)用被誤殺台汇,苦不堪言。
如何做到優(yōu)雅崩橄梗活呢苟呐?
為了做到保活俐筋,出現(xiàn)了不少的【黑科技】牵素,比如一個像素的Activity,播放無聲音頻校哎,雙進程互相守護等两波,這些做法可以說是很流氓了,甚至破壞了Android的生態(tài)闷哆,好在隨著Android系統(tǒng)版本的更新,這些非常規(guī)的钡テ穑活手段很多都已失效了抱怔。
對于那些確實需要在后臺運行的應(yīng)用,我們?nèi)绾稳プ瞿兀?/p>
后臺運行白名單
從Android 6.0開始嘀倒,系統(tǒng)為了省電增加了休眠模式屈留,系統(tǒng)待機一段時間后,會殺死后臺正在運行的進程测蘑,但系統(tǒng)會有一個后臺運行白名單灌危,白名單里的應(yīng)用將不會受到影響,在原聲系統(tǒng)下碳胳,通過【設(shè)置】->【電池】->【電池優(yōu)化】->【未優(yōu)化應(yīng)用】勇蝙,可以看到這個白名單,通常會看到下面這兩位:
當(dāng)被別人問起別的產(chǎn)品都能卑ぴ迹活味混,為什么我們的不行的時候产雹,你就知道怎么懟回去了,大廠通過和手機廠商的合作翁锡,將自己的應(yīng)用默認(rèn)加入到白名單中蔓挖,如果你在一個能談成這種合作的大廠,也就不用做什么處理了馆衔。但對于一般的小公司怎么處理呢瘟判?
好在系統(tǒng)還沒有拋棄我們,允許我們申請把應(yīng)用加入白名單角溃。那么怎么操作呢拷获?
1.首先,在AndroidManifest.xml 文件中配置一下權(quán)限:
2.可以通過以下方法判斷應(yīng)用是否在白名單中
如果不在白名單中开镣,可以通過一下代碼申請加入白名單:
申請時會出現(xiàn)下面的彈窗:
可以看到,這個系統(tǒng)彈窗會有影響電池的續(xù)航提醒邪财,所以如果想讓用戶點允許陕壹,必須進行相關(guān)的說明,如果要判斷用戶是否點擊了允許树埠,可以在申請的時候調(diào)用startActivityForResult 糠馆,? 在onActivityResult 里再判斷一次是否在白名單中。
廠商后臺管理
Android開發(fā)的一個難點在于怎憋,各個手機廠商對原生系統(tǒng)進行了不同的定制又碌,導(dǎo)致我們需要進行不同的適配,后臺管理就是一個很好的體現(xiàn)绊袋,幾乎各個廠都有自己的后臺管理毕匀,就算加入了后臺運行白名單,仍然可能會被廠商自己的后臺管理干掉癌别。
如果能把應(yīng)用加入廠商的后臺管理白名單皂岔,可以進一步降低進程被殺的概率,不同的廠商在不同的地方進行設(shè)置展姐,一般是在各自的【手機管家】躁垛,但更難的是,就算同一個廠商的系統(tǒng)圾笨,不同的版本也可能是在不同的地方設(shè)置教馆。
最理想的做法是,我們根據(jù)不同的手機擂达,甚至不同的系統(tǒng)版本土铺,給用戶呈現(xiàn)一個圖文操作步驟,并且提供一個按鈕,直接跳轉(zhuǎn)到指定的頁面進行設(shè)置舒憾,但需要對每個廠商每個版本進行適配镀钓,工作量較大,下面我已小米4C為例子進行描述镀迂,其它廠商參考相關(guān)專業(yè)文檔丁溅。
運行結(jié)果如下圖:
一般當(dāng)你選擇無限制,手機出現(xiàn)熄屏后就不會出現(xiàn)后臺殺進程現(xiàn)象探遵,親測有效窟赏。具體可參考GitHub - liuxinggithub/baohuo: 優(yōu)雅保活
其它廠商的處理可參考https://www.cnblogs.com/Android-Alvin/p/12465949.html? 僅作為個人學(xué)習(xí)總結(jié)之用箱季,有借鑒網(wǎng)絡(luò)文章涯穷,若有版權(quán)問題請聯(lián)系刪除。