也是偶然之間聽到這個詞的 Doze模式 Doze模式
Doze 翻譯為打盹, 那么Android的Doze模式呢 , 就是讓手機進(jìn)入了類似打盹的一個狀態(tài) , 在這個半夢半醒的狀態(tài)下 , 手機的后臺胃惜、服務(wù)紊浩、廣播等都會發(fā)生相應(yīng)的延遲堕虹。
Doze模式在Android M(6.0)時引入裳扯,定義了一種新的低功耗狀態(tài)山橄。
1. Doze的狀態(tài)
若判斷用戶在連續(xù)的一段時間內(nèi)沒有使用手機,就延緩終端中APP后臺的CPU和網(wǎng)絡(luò)活動耐床,以達(dá)到減少電量消耗的目的澜公。注意冕末,這里只是延緩并沒有殺死進(jìn)程萍歉。
上一張圖來解釋一下這個狀態(tài)吧(這張圖是偷的)
橫軸為時間軸侣颂,縱軸代表運行的狀態(tài)档桃,紅色為活躍,綠色為休眠
從(0,0)點開始憔晒,我們可以看到一直是紅色的運行狀態(tài)藻肄,這時候手機的狀態(tài)保持一段時間后就進(jìn)入了Doze狀態(tài):
- Screen off 屏幕熄滅
- Stationary 手機靜止 , 即不發(fā)生位移
- On Battery 使用電池供電
當(dāng)處于上述三種狀態(tài)一段時間后即進(jìn)入了Doze模式蔑舞,這時所有的活動都暫時被停止,只有在maintenance window時才會繼續(xù)運行一小段時間隨后又繼續(xù)Doze , 這個maintenance window就是Doze模式中讓系統(tǒng)繼續(xù)運行的一個狀態(tài) , 這個狀態(tài)自動定時進(jìn)入.
這樣, 手機就可以在保留了活動的情況下,達(dá)到了省電的目的.
一旦不滿足上述的三種條件時嘹屯,立即退出Doze模式
Doze模式中發(fā)生了什么
Doze并沒有殺死進(jìn)程
1攻询、暫停網(wǎng)絡(luò)訪問。
2州弟、系統(tǒng)忽略所有的WakeLock钧栖。
3、標(biāo)準(zhǔn)的AlarmManager alarms被延緩到下一個maintenance window婆翔。
但使用AlarmManager的 setAndAllowWhileIdle拯杠、setExactAndAllowWhileIdle和setAlarmClock時,alarms定義事件仍會啟動啃奴。
在這些alarms啟動前潭陪,系統(tǒng)會短暫地退出Doze模式。
4最蕾、系統(tǒng)不再進(jìn)行WiFi掃描依溯。
5、系統(tǒng)不允許sync adapters運行瘟则。
6黎炉、系統(tǒng)不允許JobScheduler運行
逃脫Doze模式
Android6.0及更高版本還提供了Doze模式白名單列表,通過設(shè)置應(yīng)用程序進(jìn)入白名單列表, 引導(dǎo)用戶設(shè)置白名單, 可逃脫Doze模式的各種限制醋拧。
- 檢測應(yīng)用程序是否存在白名單list里面拜隧,可使用PowerManager的isIgnoringBatteryOptimizations()方法。
- 引導(dǎo)到電池優(yōu)化界面,讓用戶去管理白名單
Intent i = new Intent();
i.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
startActivity(i);
在DeviceIdle中有三中類型的白名單列表:
- Doze模式下被限制的系統(tǒng)級App: mPowerSaveWhitelistAppsExceptIdle
- 所有模式下(Doze和app standby)被限制的系統(tǒng)級App mPowerSaveWhitelistApps
- 所有模式下被限制的用戶級App: mPowerSaveWhitelistUserApps