????????在Android6.0以后论泛,Android引入了Doze模式职恳,目前是優(yōu)化電池使用所禀,優(yōu)化后臺(tái)程序谜悟。
????????Doze模式是Android6.0上新出的一種模式,是一種全新的北秽、低能耗的狀態(tài),在后臺(tái)只有部分任務(wù)允許運(yùn)行最筒,其他都被強(qiáng)制停止贺氓。當(dāng)用戶一段時(shí)間沒(méi)有使用手機(jī)的時(shí)候,Doze模式通過(guò)延緩app后臺(tái)的CPU和網(wǎng)絡(luò)活動(dòng)減少電量的消耗...
????????關(guān)于Doze模式的介紹床蜘,具體看:http://blog.csdn.net/zhenjie_chang/article/details/52513388
--------
? ? ? ? 在引入了該模式后辙培,對(duì)需要常駐后臺(tái)的應(yīng)用都會(huì)產(chǎn)生影響,例如微信邢锯,一旦手機(jī)進(jìn)入了Doze模式扬蕊,微信都將收不到推送。以前常用的一些使Android應(yīng)用常駐后臺(tái)的方案:守護(hù)Service丹擎,AlarmManager尾抑,JobSchedule 這些東西在面對(duì)Doze的時(shí)候,都是無(wú)效的蒂培。
? ? ? ? 后面的介紹以Android O為平臺(tái):
? ? ? ? 在設(shè)置 - 電池里面再愈,點(diǎn)擊右上角三點(diǎn),點(diǎn)擊電池優(yōu)化护戳,將會(huì)展示一個(gè)未優(yōu)化的列表翎冲,這個(gè)就是Doze White List,Doze白名單媳荒,在這個(gè)列表里面的應(yīng)用抗悍,在手機(jī)息屏進(jìn)入Doze模式的時(shí)候,仍然是能夠運(yùn)行的钳枕,默認(rèn)的在Doze白名單的里面的包括Download,Shell等缴渊,后續(xù)會(huì)開(kāi)一片文章說(shuō)明怎么在源碼開(kāi)發(fā)中,將程序?qū)⑷氲紻oze白名單中鱼炒。
? ? ? ? 普通的APP程序是沒(méi)有辦法調(diào)用系統(tǒng)的加入Doze白名單的
? ??????public abstract void addPowerSaveWhitelistApp (String packageNameOfApp)
? ? ? ? 因?yàn)檫@個(gè)是一個(gè)接口方法疟暖。
? ? ? ? 我們能做的是,在打開(kāi)程序的時(shí)候田柔,檢測(cè)我們的程序是否在Doze白名單中俐巴,如果不在,那么調(diào)用系統(tǒng)的方法硬爆,請(qǐng)求加入白名單中:
? ? ? ? 具體的實(shí)現(xiàn)很簡(jiǎn)單:
? ? ? ? Step1:在AndroidManifest.xml文件中配置權(quán)限:
? ? ? ? ? ?<uses-permission?android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS">
? ? ? ? Step2:打開(kāi)程序的時(shí)候檢測(cè)自己的應(yīng)用是否在白名單中欣舵,如果不在白名單中,請(qǐng)求權(quán)限:
用戶選擇賦予權(quán)限缀磕,這樣我們的程序就加入到Doze白名單中缘圈,在設(shè)置里面便能看到劣光。