Android M 優化電池性能的 Doze 模式工作原理是怎樣的?


下面這張圖片是我根據代碼分析的結果:

Doze打盹模式共有五種狀態,不同狀態間的切換如下圖所示,如果廠家沒有修改時間的話,因此從滅屏到Doze模式,至少需要61分鐘,官方是60分鐘,但需要1分鐘作為運動監測。

根據代碼跟蹤,如果應用不在白名單,系統滅屏經過大約一小時後,上層應用wake lock,alarm,還有網路鏈接都會失效,除非你是白名單應用.

影響:

  1. 廠家:天助我也!!!!可以隨意修改系統默認的白名單,因此對他們沒有任何影響.甚至,開機每次檢測白名單配置文件,你想刪除我,呵呵.
  2. 對普通應用,Doze的作者還是很有良心的.Doze模式啟動後,每隔30分鐘,將Doze關閉,給非白名單應用30秒的復活時間,然後又回到了Doze模式!呵呵,你們看著辦吧,只有30s,就只有30s!!!這個時候,大家可以嘗試使用Alarm clock喚醒(猜的,沒做個測試).

  1. 官方非白名單,一次只有一次機會~~~~~~~~~代碼上確實還周期的打開關閉Doze
  2. DozeService,它僅僅是一個狀態的切換。當切換到Doze後具體的限制還需要分析PowerManager,BatteryStats等,具體有那些限制在Google官網有說明,樓下小明已經複製過來,結合源碼分析。對App開發則而已,有必要學習一下。


Doze

If a device is unplugged and left stationary with the screen off for a period of time, it goes into Doze mode where it attempts to keep the system in a sleep state. In this mode, devices periodically resume normal operations for brief periods of time so that app syncing can occur and the system can perform any pending operations.

The following restrictions apply to your apps while in Doze:

  • Network access is disabled, unless your app receives a high priority Google Cloud Messaging tickle.
  • Wake locks are ignored.
  • Alarms scheduled with the AlarmManager class are disabled, except for alarms that youve set with thesetAlarmClock() method and AlarmManager.setAndAllowWhileIdle().
  • WiFi scans are not performed.
  • Syncs and jobs for your sync adapters and JobScheduler are not permitted to run.

When the device exits doze, it executes any jobs and syncs that are pending.

以官方介紹來看,將影響Alarm,Wakelock,同步。舊版sdk編譯的app同樣受到影響。

估計跟sony的stamina功能類似。


自帶綠色守護


推薦閱讀:

t460s的雙電池意義何在?

TAG:電池技術 | 谷歌Google | GoogleIO2015 | AndroidM |