為了延長裝置的電池續航力,Android 會監控裝置的使用情形和喚醒狀態,進而影響裝置狀態。平台可進入休眠狀態,在裝置未使用時暫停執行活動。
關於打盹模式
Doze 會在裝置長時間未使用時,延遲應用程式背景 CPU 和網路活動,藉此延長電池續航力。
處於 Doze 的閒置裝置會定期進入維護期間,在此期間,應用程式可以完成待處理的工作 (同步處理、工作等)。接著,Doze 會恢復休眠狀態一段較長的時間,然後再進入另一個維護期間。平台會繼續執行 Doze 休眠/維護程序,每次都增加閒置時間長度,直到休眠時間達到幾小時的上限為止。處於打盹模式的裝置會持續偵測動作,並在偵測到動作時立即離開打盹模式。
Android 7.0 以上版本會延伸 Doze,在使用者關閉裝置螢幕時觸發較輕量化的最佳化設定,即使使用者持續移動,也能延長電池續航力。
裝置製造商通常會將重要系統服務設為不受 Doze 影響。使用者也可以透過「設定」選單,將特定應用程式排除在 Doze 之外。不過,如果要排除應用程式,可能會導致裝置耗電。根據預設,AOSP 會停用打盹模式。如要進一步瞭解如何啟用打盹模式,請參閱「整合打盹模式」。
Doze 需求
裝置必須支援 Doze,才能使用雲端訊息服務,例如 Firebase 雲端通訊 (FCM)。雲端訊息等外部觸發事件,可以在裝置處於 Doze 模式時,暫時喚醒應用程式執行工作。
完整的 Doze 支援功能也需要裝置上有重大動作偵測器 (SMD);不過,Android 7.0 以上版本的輕量 Doze 模式不需要 SMD。如果在下列情況下啟用 Doze:
- 已啟用 SMD,並進行完整的 Doze 最佳化 (包括輕量最佳化)。
- 沒有 SMD,只會進行輕量 Doze 最佳化。
Doze 生命週期
當平台偵測到裝置處於閒置狀態時,Doze 就會開始運作,並在發生一或多個退出條件活動時結束。
平台會在下列情況下偵測裝置處於閒置狀態:
- 裝置處於靜止狀態 (使用 SMD)。
- 裝置螢幕關閉一段時間。
當電池供電裝置接上充電器時,Doze 模式不會啟用。
在打盹模式期間
平台會嘗試讓系統維持在休眠狀態,在維護期間定期恢復正常運作,然後讓裝置進入休眠狀態,重複執行更長的時間。在睡眠期間,系統會啟用下列限制:
- 應用程式無法存取網路。
- 忽略應用程式喚醒鎖定。
- 鬧鐘會延遲響鈴。不含鬧鐘鬧鐘和使用
setAndAllowWhileIdle()
設定的鬧鐘 (在 Doze 模式下,每個應用程式每 15 分鐘限 1 次)。這項豁免條款適用於必須顯示活動提醒通知的應用程式 (例如日曆)。 - 不會執行 Wi-Fi 掃描。
SyncAdapter
同步處理作業和JobScheduler
工作會延後至下次維護期間。- 接收簡訊和多媒體訊息的應用程式會暫時加入許可清單,以便完成處理作業。
離開
平台會在偵測到下列情況時,讓裝置退出打盹模式:
- 使用者與裝置的互動
- 裝置移動
- 裝置螢幕會亮起
- 即將響起的 AlarmClock 鬧鐘
通知不會讓裝置退出休眠模式。
Android 7.0 以上版本會在裝置閒置之前,在螢幕關閉期間啟用輕量睡眠模式,藉此延長 Doze 的時間。
圖 1. 適用於非靜止和靜止裝置的 Doze 模式。
動作 | 打盹 | 輕量打盹模式 |
---|---|---|
觸發條件 | 螢幕關閉、電池供電、靜止 | 螢幕關閉,使用電池 (未插電) |
時間 | 透過維護作業逐漸增加期間 | 重複的 N 分鐘週期,含維護期間 |
限制 | 沒有網路存取、喚醒鎖定或 GPS/Wi-Fi 掃描;鬧鐘和工作/同步處理作業延後 | 沒有網路存取權;工作/同步作業會延遲,除非是在維護期間 |
行為 | 只接收高優先順序的推播通知訊息 | 接收所有即時訊息 (即時訊息、通話等);高優先順序的推播通知訊息可啟用暫時網路存取權 |
離開 | 動作、螢幕開啟或鬧鐘響起 | 螢幕開啟 |
與應用程式待命互動
- 在打盹模式下所花的時間不會計入應用程式待命時間。
- 裝置處於 Doze 模式時,閒置應用程式至少可每天執行一次正常作業。
整合 Doze
啟用 Doze 後,支援 SENSOR_TYPE_SIGNIFICANT_MOTION
的裝置會執行完整的 Doze 最佳化功能 (包括輕量級最佳化功能);沒有 SMD 的裝置則只會執行輕量級 Doze 最佳化功能。Android 會自動選取適當的 Doze 最佳化設定,因此不需要供應商設定。
如何為裝置啟用 Doze:
- 確認裝置已安裝雲端訊息服務。
- 在裝置疊加設定檔
overlay/frameworks/base/core/res/res/values/config.xml
中,將config_enableAutoPowerModes
設為true
: 在 AOSP 中,這個參數預設為<bool name="config_enableAutoPowerModes">true</bool>
false
(Doze 已停用)。
- 確認預先載入的應用程式和服務:
- 請參考省電最佳化指南。詳情請參閱「測試及最佳化應用程式」。
或
- 不受打盹和應用程式待命功能的影響。詳情請參閱「排除應用程式」。
- 請參考省電最佳化指南。詳情請參閱「測試及最佳化應用程式」。
- 確認必要服務不受 Doze 影響。
訣竅
- 盡可能使用 FCM 傳送下游訊息。
- 如果使用者必須立即看到通知,請使用 FCM 高優先順序訊息。
- 在初始訊息酬載中提供足夠的資訊 (避免後續不必要的網路存取)。
- 使用
setAndAllowWhileIdle()
和setExactAndAllowWhileIdle()
設定重要警報。
測試及最佳化應用程式
請在 Doze 模式下測試所有應用程式 (尤其是預先載入的應用程式)。詳情請參閱「使用打盹和應用程式待命功能進行測試」。