Android 提供兩項省電功能,可延長使用者的電池續航力。 管理裝置在未連接電源時的行為:打盹 以及應用程式待命功能打盹功能會延後來減少電池耗電量 裝置長時間未使用時應用程式的背景 CPU 和網路活動 範圍。應用程式待命會延後以下應用程式的背景網路活動: 最近沒有使用者活動的應用程式。
當裝置處於「打盹」模式時,應用程式存取某些很耗電的情況 將資源延後到維護期間。具體限制 電源管理 限制。
「打盹和應用程式待命」功能可管理所有在 Android 6.0 上執行的應用程式行為 或更高級別,不論是特別指定 API 級別 23 還是都一樣。 為確保使用者能獲得最佳體驗,請在「打盹」和「應用程式」中測試應用程式 待命模式,並對程式碼進行所有必要的調整。下列 部分提供詳細資料。
瞭解打盹功能
如果使用者將裝置放在未接上電源並靜止一段時間, 螢幕關閉時,裝置就會進入打盹模式。在打盹模式下,系統會嘗試 限制應用程式以節省電力可存取須耗用大量記憶體的網路和 CPU 免費 Google Cloud 服務還能防止應用程式存取網路,並延後 工作、同步處理作業和標準鬧鐘。
系統會定期結束打盹功能,讓應用程式順利運作 延後追蹤活動的時間在這個維護期間,系統會 會執行所有待處理的同步處理、工作和鬧鐘,並允許應用程式存取網路。
![](https://developer.android.com/static/images/training/doze.png?hl=zh-tw)
維護期間結束後,系統會再次進入「打盹」模式。 暫停網路存取及延遲工作、同步程序和鬧鐘。隨著新版本 系統縮短維護期間的頻率,進而降低電池用量 因裝置未充電而閒置時的耗電量。
當使用者以移動裝置、開啟螢幕或 連接充電器時,系統會結束打盹,所有應用程式將恢復正常運作。 活動。
打盹限制
在打盹模式下,系統會對應用程式套用下列限制:
- 暫停網路存取權。
- 忽略清醒 鎖定。
- 延遲標準
AlarmManager
鬧鐘,包括setExact()
和setWindow()
, 下一個維護期間- 如要設定在打盹模式觸發的鬧鐘,請使用
setAndAllowWhileIdle()
或setExactAndAllowWhileIdle()
。 - 鬧鐘已設定
setAlarmClock()
繼續正常運作。不久後,系統就會結束打盹模式。 鬧鐘啟動時,
- 如要設定在打盹模式觸發的鬧鐘,請使用
- 不會掃描 Wi-Fi。
- 不讓同步轉換介面執行。
- 別灰心
JobScheduler
此程序的第一步 是將程式碼簽入執行所有單元測試的存放區中
打盹檢查清單
- 如果可以,請使用 Firebase 雲端通訊 (FCM) 下游 傳送訊息
- 如果使用者必須立即看到通知,請使用 FCM 高優先順序訊息。僅針對可能產生的郵件使用高優先順序 例如通知、說明和文字等如需詳細指引,請參閱 FCM 的 瞭解 Android 訊息優先順序的說明文件。
- 在初始訊息中提供足夠的資訊 酬載,這樣就不必繼續存取網路。
- 使用
setAndAllowWhileIdle()
和setExactAndAllowWhileIdle()
。 - 在「打盹」功能中測試應用程式。
根據打盹模式調整應用程式
視應用程式提供的功能而定,打盹方式對應用程式的影響可能有所不同 及其使用的服務許多應用程式在打盹週期之間仍可正常運作 未經修改。在某些情況下,您必須最佳化應用程式 管理網路、鬧鐘、工作和同步處理作業。應用程式必須具有效率 管理各個維護期間的活動
如要協助排定鬧鐘時間,可以使用兩個 AlarmManager
方法:setAndAllowWhileIdle()
和
setExactAndAllowWhileIdle()
。你可以使用這些方法設定鬧鐘
就算裝置處於「打盹」模式也一樣
網路存取權的打盹限制也可能會影響您的應用程式。 尤其是當應用程式需要即時訊息,例如滴答聲或 通知。如果應用程式需要持續連上網路才能 接收訊息,請使用 Firebase 雲端通訊 (FCM)
如要確認應用程式透過打盹功能正常運作,可以使用
adb
指令:強制系統進入及結束打盹模式,並
觀察應用程式行為詳情請參閱
使用打盹和應用程式待命功能進行測試。
瞭解應用程式待命功能
應用程式待命功能可讓系統判斷應用程式在使用者未處於閒置狀態時 積極使用如果使用者未 在特定期間輕觸應用程式,且沒有以下條件 適用範圍:
- 使用者明確啟動應用程式。
- 應用程式目前會在前景執行程序,做為活動 或由其他活動或前景服務使用。
- 應用程式會產生通知,讓使用者能在螢幕鎖定畫面或 通知匣。
當使用者將裝置插上電源供應器時,系統會發布應用程式 讓用戶端能夠自由存取網路並執行 待處理工作和同步作業。如果裝置長時間閒置, 系統允許閒置應用程式每天存取網路一次
使用 FCM 在裝置處於閒置狀態時與應用程式互動
Firebase 雲端 訊息 (FCM) 是一項雲端對裝置服務,可讓您即時處理 後端服務和 Android 裝置上的應用程式之間下游訊息。FCM 提供單一的永久連線連至雲端。所有應用程式都需要 即時訊息就是這麼簡單。這個共用連線 大幅提高電池耗電量 多個應用程式維護自己的獨立永久連線, 迅速耗盡電池電力因此,如果您的應用程式需要訊息功能 因此我們強烈建議您使用 FCM 而不必維持您自己的永久網路連線
FCM 經過最佳化,可與打盹和應用程式待命模式搭配使用。FCM 且可讓您喚醒應用程式來吸引使用者。在打盹或應用程式中 待機模式會傳送訊息,並將暫時存取權授予應用程式 然後將裝置或應用程式退回給 閒置狀態。針對具時效性且使用者可察覺的通知,請考慮使用高 以便啟用打盹模式傳送功能的訊息高優先順序郵件可 導致系統傳送通知給你。詳情請見 FCM 的 指南。
適用於不會接收通知的訊息,例如保留應用程式內容 或是啟動資料同步處理作業,請使用一般優先順序 FCM 訊息。如果沒有裝置,系統會立即傳送一般優先順序的郵件 。如果裝置處於打盹模式,則會在定期送達 暫停維護期間或在使用者喚醒裝置後立即啟動。
一般而言,如果您的應用程式需要下游訊息,請使用 FCM。如果您的應用程式已使用 FCM,請確認應用程式使用高優先順序訊息 僅適用於會產生使用者通知的訊息。
其他用途的支援功能
幾乎所有應用程式都能透過管理網路連線來支援打盹功能。 鬧鐘、工作和同步處理作業,以及使用 FCM 訊息。有限度使用 原因可能不足在這種情況下,系統會提供 可設定部分不受打盹和應用程式待命限制的應用程式 以及最佳化調整
部分豁免的應用程式可以使用網路並保留部分喚醒
會在打盹和應用程式待命期間鎖定裝置。但須遵守其他限制
就像對其他應用程式一樣例如應用程式的工作和同步處理作業
在 API 級別 23 以下版本,
AlarmManager
的鬧鐘未觸發。應用程式可以確認是否
目前位於豁免清單上,方法是呼叫
isIgnoringBatteryOptimizations()
。
使用者可以前往「設定」頁面,手動設定豁免的應用程式清單 >電池 >電池效能最佳化。或者,系統 這類方式可讓應用程式要求使用者免受政策規範:
- 大多數應用程式都可以叫用包含
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
。 - 應用程式符合使用限制
可改為叫用包含
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
意圖動作可讓使用者將應用程式直接新增至豁免清單; 不必前往系統設定
應用程式可以呼叫以下呼叫,確認目前是否在豁免清單上
isIgnoringBatteryOptimizations()
。
使用打盹和應用程式待命功能進行測試
為了確保使用者能獲得良好的體驗,請使用打盹功能完整測試應用程式 以及應用程式待命功能
透過 Doze 測試應用程式
如要測試打盹模式,請按照下列步驟操作:
- 設定搭載 Android 6.0 (API) 的硬體裝置或虛擬裝置 第 23 層) 或更高等級的系統映像檔。
- 將裝置連線至開發機器,並安裝應用程式。
- 執行應用程式,並讓應用程式保持啟用狀態。
- 執行下列指令,強制系統進入閒置模式:
$ adb shell dumpsys deviceidle force-idle
- 準備就緒後,請執行下列指令來結束閒置模式:
$ adb shell dumpsys deviceidle unforce
- 執行以下指令來重新啟用裝置:
$ adb shell dumpsys battery reset
- 重新啟用裝置後,請觀察應用程式的行為。廠牌 確保裝置在裝置退出「打盹」模式時能夠安全復原。
使用應用程式待命測試應用程式
如要使用應用程式測試應用程式待命模式,請按照下列步驟操作:
- 設定搭載 Android 6.0 (API) 的硬體裝置或虛擬裝置 第 23 層) 或更高等級的系統映像檔。
- 將裝置連線至開發機器,並安裝應用程式。
- 執行應用程式,並讓應用程式保持啟用狀態。
- 執行下列指令,強制應用程式進入應用程式待命模式:
$ adb shell dumpsys battery unplug $ adb shell am set-inactive <packageName> true
- 使用下列指令模擬喚醒應用程式:
$ adb shell am set-inactive <packageName> false $ adb shell am get-inactive <packageName>
- 觀察應用程式喚醒後的行為。確認應用程式 會從待命模式安全復原。請特別檢查應用程式的 通知和背景工作功能可正常運作
使用限制的使用限制
下表重點說明幾種用途,以及是否可接受
使用 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
的應用程式
意圖動作您的應用程式通常不符合這些條件
除非打盹或應用程式待命中斷應用程式的核心功能
基於技術原因,您的應用程式無法使用 FCM 高優先順序
訊息。
詳情請參閱支援人員 其他用途
類型 | 用途 | 可以使用 FCM 嗎? | 是否接受豁免? | 附註 |
---|---|---|---|---|
即時通訊、即時通訊或通話應用程式。 | 需要向使用者傳送即時訊息 裝置正在使用「打盹」或「應用程式待命」模式。 | 是,使用 FCM | 不接受 | 使用 FCM 高優先順序的訊息喚醒應用程式和存取權 網路。 |
是,但未使用 FCM 高優先順序的訊息。 | ||||
即時通訊、即時通訊或通話應用程式; 以及企業 VOIP 應用程式 | 否,由於其他訊息的技術依附,因此無法使用 FCM 服務,或打盹和應用程式待命功能會破壞應用程式的核心功能。 | 可接受 | ||
「安全」應用程式。 | 應用程式能保障使用者與家庭安全。 | 依適用情況提供。 | 可接受 | |
工作自動化應用程式。 | 應用程式的核心功能是排定自動化動作的時間,例如 傳訊、語音通話或全新的相片管理功能 | 依適用情況提供。 | 可接受 | |
週邊裝置隨附應用程式。 | 應用程式的核心功能是讓 為提供週邊裝置而使用的周邊裝置 網路連線。 | 依適用情況提供。 | 可接受 | |
應用程式只需定期連線至週邊裝置就能同步, 或只需要連線至裝置,例如無線耳機 與標準藍牙設定檔相比 | 依適用情況提供。 | 不接受 |