使用 Doze 管理平台電源

為了延長裝置的電池續航力,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:

  1. 確認裝置已安裝雲端訊息服務。
  2. 在裝置疊加設定檔 overlay/frameworks/base/core/res/res/values/config.xml 中,將 config_enableAutoPowerModes 設為 true
    <bool name="config_enableAutoPowerModes">true</bool>
    
    在 AOSP 中,這個參數預設為 false (Doze 已停用)。
  3. 確認預先載入的應用程式和服務:
  4. 確認必要服務不受 Doze 影響。

訣竅

測試及最佳化應用程式

請在 Doze 模式下測試所有應用程式 (尤其是預先載入的應用程式)。詳情請參閱「使用打盹和應用程式待命功能進行測試」。