原文:https://source.android.com/devices/tech/power/platform_mgmt
為了提高設(shè)備電池壽命,Android可以通過(guò)監(jiān)測(cè)設(shè)備使用和覺(jué)醒來(lái)影響設(shè)備狀態(tài)。在設(shè)備未使用時(shí),平臺(tái)可以通過(guò)進(jìn)入休眠狀態(tài)來(lái)暫停運(yùn)行中的活動(dòng)。
Doze(打盹)
當(dāng)設(shè)備長(zhǎng)時(shí)間不使用時(shí),Doze會(huì)延遲應(yīng)用程序后臺(tái)CPU和網(wǎng)絡(luò)活動(dòng),從而延長(zhǎng)電池續(xù)航。
Doze中的空閑設(shè)備會(huì)定期進(jìn)入維護(hù)窗口,在此期間應(yīng)用程序可以完成待處理的工作(同步,作業(yè)等)。Doze然后重新開(kāi)始睡眠更長(zhǎng)的時(shí)間,然后緊跟著另一個(gè)維護(hù)窗口。平臺(tái)持續(xù)Doze睡眠/維護(hù)序列,每次增加空閑時(shí)間,直到達(dá)到最多幾小時(shí)的睡眠時(shí)間。在任何時(shí)候,Doze中的設(shè)備都會(huì)保持運(yùn)動(dòng)感知,如果檢測(cè)到運(yùn)動(dòng),會(huì)立即離開(kāi)打盹。
每當(dāng)用戶(hù)關(guān)閉設(shè)備屏幕時(shí),Android 7.0及更高版本都會(huì)擴(kuò)展Doze以觸發(fā)更輕量的優(yōu)化集,即使用戶(hù)繼續(xù)四處移動(dòng),也能延長(zhǎng)電池續(xù)航時(shí)間。
關(guān)鍵系統(tǒng)服務(wù)通常由設(shè)備制造商設(shè)置為免于Doze。用戶(hù)還可以通過(guò)“設(shè)置”菜單從Doze中免除特定應(yīng)用。但是,免除應(yīng)用程序可能會(huì)導(dǎo)致設(shè)備電池耗盡。AOSP中默認(rèn)禁用 Doze ; 有關(guān)啟用Doze的詳細(xì)信息,請(qǐng)參閱集成Doze。
Doze要求
Doze支持需要設(shè)備具有云消息服務(wù),例如 Firebase云消息(FCM)。在設(shè)備處于Doze模式時(shí),外部觸發(fā)事件(例如云消息)可以暫時(shí)喚醒應(yīng)用程序執(zhí)行工作。
完全Doze支持還需要設(shè)備上的 重要運(yùn)動(dòng)檢測(cè)器(SMD) ; 但是,Android 7.0及更高版本中的輕量級(jí)Doze模式不需要SMD。如果在以下設(shè)備上啟用Doze,那么:
- 有SMD的設(shè)備,完全的Doze優(yōu)化(包括輕量級(jí)優(yōu)化)。
- 沒(méi)有SMD的設(shè)備,只會(huì)發(fā)生輕量級(jí)的Doze優(yōu)化。
Doze生命周期
當(dāng)平臺(tái)檢測(cè)到設(shè)備空閑時(shí),Doze開(kāi)始;當(dāng)一個(gè)或多個(gè)退出標(biāo)準(zhǔn)活動(dòng)發(fā)生時(shí),Doze結(jié)束。
偵測(cè) | Doze期間 | 退出 |
---|---|---|
在以下情況下,平臺(tái)檢測(cè)到設(shè)備處于空閑: 1. 設(shè)備是靜止的(使用重要的運(yùn)動(dòng)檢測(cè)器)。2. 設(shè)備屏幕關(guān)閉了一段時(shí)間。當(dāng)設(shè)備插入充電器時(shí),Doze模式不會(huì)啟用。 | 平臺(tái)試圖使系統(tǒng)保持睡眠狀態(tài),在維護(hù)窗口期間定期恢復(fù)正常操作,然后使設(shè)備進(jìn)入睡眠狀態(tài)更長(zhǎng)的重復(fù)周期。在睡眠期間,以下限制處于活動(dòng)狀態(tài):1. 應(yīng)用不允許網(wǎng)絡(luò)訪問(wèn)。2. App wakelocks被忽略了。3. 鬧鐘推遲。不包括AlarmClock鬧鐘和使用setAndAllowWhileIdle() 設(shè)置的鬧鐘(在Doze中每個(gè)應(yīng)用限制為每15分鐘1次)。此免除適用于必須顯示事件提醒通知的應(yīng)用程序(如日歷)。4. 未執(zhí)行Wi-Fi掃描。5. SyncAdapter 同步和JobScheduler 作業(yè)推遲到下一個(gè)維護(hù)窗口。6. 接收短信和彩信的應(yīng)用會(huì)被置于臨時(shí)白名單中,以便他們完成處理。 |
當(dāng)平臺(tái)檢測(cè)到以下情況時(shí),平臺(tái)將從Doze退出設(shè)備:1. 用戶(hù)與設(shè)備的交互。2. 設(shè)備移動(dòng)。3. 設(shè)備屏幕亮起。4. 即將發(fā)生的AlarmClock鬧鐘。通知不會(huì)導(dǎo)致設(shè)備退出Doze。 |
Android 7.0及更高版本通過(guò)在屏幕關(guān)閉期間在設(shè)備空閑之前啟用輕量級(jí)睡眠模式來(lái)擴(kuò)展Doze。
動(dòng)作 | Doze | 輕量級(jí)的Doze |
---|---|---|
觸發(fā) | 屏幕關(guān)閉,使用電池,靜止不動(dòng) | 屏幕關(guān)閉,使用電池(未插電) |
定時(shí) | 連續(xù)增加維護(hù)期 | 具有維護(hù)窗口的重復(fù)N分鐘時(shí)段 |
限制 | 無(wú)網(wǎng)絡(luò)訪問(wèn)、喚醒鎖或GPS / Wi-Fi掃描。鬧鐘和工作/同步被延遲。 | 無(wú)網(wǎng)絡(luò)訪問(wèn)。除維護(hù)窗口期間外,作業(yè)/同步延遲被延遲。 |
行為 | 僅接收高優(yōu)先級(jí)的推送通知。 | 可接收所有實(shí)時(shí)消息(即時(shí)消息,呼叫等)。高優(yōu)先級(jí)推送通知消息可啟用臨時(shí)網(wǎng)絡(luò)訪問(wèn)。 |
退出 | 運(yùn)動(dòng),屏幕點(diǎn)亮或鬧鐘響鈴。 | 屏幕點(diǎn)亮。 |
與App Standby的相互影響
- 處于Doze中的時(shí)間不計(jì)入App Standby。
- 當(dāng)設(shè)備處于Doze時(shí),允許空閑應(yīng)用程序每天至少執(zhí)行一次正常操作。
集成Doze
啟用Doze時(shí),支持SENSOR_TYPE_SIGNIFICANT_MOTION
的設(shè)備將執(zhí)行完整的Doze優(yōu)化(包括輕量級(jí)優(yōu)化); 沒(méi)有SMD的設(shè)備只執(zhí)行輕量級(jí)的Doze優(yōu)化。Android會(huì)自動(dòng)選擇合適的Doze優(yōu)化,無(wú)需廠商配置。
設(shè)備啟用Doze:
- 確認(rèn)設(shè)備已安裝云消息服務(wù)。
- 在設(shè)備
overlay
配置文件overlay/frameworks/base/core/res/res/values/config.xml
中設(shè)置config_enableAutoPowerModes
為true:
<bool name =“config_enableAutoPowerModes”> true </ bool>
AOSP中此參數(shù)默認(rèn)為false(Doze被禁用)。
- 確認(rèn)預(yù)置的應(yīng)用和服務(wù):
- 使用 節(jié)能優(yōu)化指南。詳情參見(jiàn)測(cè)試和優(yōu)化應(yīng)用程序。
或 - 免除Doze和App Standby。詳情參見(jiàn) 免除申請(qǐng)。
- 使用 節(jié)能優(yōu)化指南。詳情參見(jiàn)測(cè)試和優(yōu)化應(yīng)用程序。
- 確認(rèn)必要的服務(wù)免于Doze。
提示
- 盡可能使用FCM 下載消息。
- 如果您的用戶(hù)要求立即看到通知,請(qǐng)使用 FCM高優(yōu)先級(jí)消息。
- 在初始消息負(fù)載時(shí)提供足夠的信息 (以避免不必要的連續(xù)訪問(wèn)網(wǎng)絡(luò))。
- 重要鬧鐘設(shè)置用
setAndAllowWhileIdle()
和setExactAndAllowWhileIdle()
。
測(cè)試和優(yōu)化應(yīng)用程序
在Doze模式下測(cè)試所有應(yīng)用程序(尤其是預(yù)置的應(yīng)用程序)。詳情參見(jiàn) 測(cè)試Doze和App Standby。
注意: MMS/SMS/電話服務(wù)的功能獨(dú)立于Doze,即使設(shè)備處于Doze模式,也會(huì)始終喚醒客戶(hù)端應(yīng)用程序。