Android 9 (API 級別 28) 推出了新功能,可改善裝置電源管理。這些變更與先前版本中已提供的功能,有助於確保系統資源會提供給最需要的應用程式。
電源管理功能可分為兩類:
- 應用程式待命值區
- 系統會限制應用程式能存取裝置資源 CPU 或電池。這是 Android 9 的新功能。
- 省電模式改善功能
- 省電模式開啟時, 系統會對所有應用程式設下限制這是 Android 9 改善的現有功能。
應用程式待命值區
Android 9 推出了新的電池管理功能:應用程式待命值區。應用程式待命值區會根據應用程式的使用時間和使用頻率,協助應用程式優先處理資源要求。根據應用程式使用情形 就會排入五個優先順序的值區之一系統 根據應用程式所屬的值區,限制每個應用程式可用的裝置資源 。
這五個值區會根據下列特性,將應用程式分為不同的群組:
- 使用中
如果使用者目前正在使用應用程式,應用程式就會位於「使用中」值區,例如:
- 應用程式已經啟動一項活動
- 應用程式正在執行前景服務
- 應用程式的同步轉換介面與 前景應用程式
- 使用者點選應用程式通知
如果應用程式位在使用中值區,系統就不會對應用程式的工作、鬧鐘或 FCM 訊息設下任何限制。
- 工作組
如果應用程式經常執行,但目前並未執行,就會位於工作組值區 有效。舉例來說,使用者最常啟動的社群媒體應用程式 挑選適合的機型應用程式也會升級為工作組 可以儲存在值區中
當應用程式位於工作組值區,系統會對其執行工作及觸發鬧鐘的功能設下輕微限制。詳情請參閱「電源管理限制」。
- 常用
經常使用的應用程式 (但不一定) 會指派至常用值區 關心時事的讀者舉例來說,使用者在健身房執行的健身追蹤應用程式可能就位於常用值區。
當應用程式位於常用值區,系統會對其執行工作及觸發鬧鐘的功能設下較嚴格的限制,並對高優先順序的 FCM 訊息設下上限。詳情請參閱 電源管理限制:
- 很少使用
不常使用的應用程式會位於「很少使用」值區。例如飯店應用程式 使用者只在飯店入住時才會放送廣告 Cloud Storage 也提供目錄同步處理功能 方便您同步處理 VM 目錄與值區
假使應用程式位於很少使用值區,系統會對其執行工作、觸發鬧鐘和接收高優先順序 FCM 訊息的功能設下嚴格限制。此外,系統也會限制這類應用程式的網際網路連線功能。詳情請參閱「電源管理限制」。
- 從未
已安裝但從未執行的應用程式,會指派至從未執行值區。 系統對這類應用程式設有嚴格的限制。
系統會以動態方式指派每個應用程式至一個優先順序值區, 視需要使用其他應用程式。系統可能需要仰賴使用機器學習技術的預先載入應用程式,判斷每個應用程式的使用機率,然後將應用程式指派至適當的值區。如果裝置上沒有系統應用程式,系統會預設根據應用程式的上次使用時間排序應用程式。活動較頻繁的應用程式會指派至賦予較高優先順序的值區,以便為該應用程式提供更多系統資源。具體來說,值區會決定應用程式工作的執行頻率、應用程式觸發鬧鐘的頻率,以及應用程式接收高優先順序 Firebase 雲端通訊 (FCM) 訊息的頻率。這些限制只有在裝置使用電池電力時才適用;如果裝置正在充電,系統不會對應用程式強制執行這些限制。
針對非使用中應用程式如何指派至值區,每個製造商都可以自行設定條件。請勿試圖改變應用程式使用的值區
。而是專注於確保應用程式無論在哪個值區都能正常運作。您的應用程式可以透過以下方式找出目前所在的值區:
呼叫新方法
UsageStatsManager.getAppStandbyBucket()
。
最佳做法
如果應用程式已經採用打盹和應用程式待命的最佳做法,處理新的電源管理功能應該不會太難。不過 某些先前運作良好的應用程式行為,現在可能會造成問題。
- 請勿試圖操控系統,將應用程式指派至單一值區或 另一個例子。系統的值區劃分方法可能會改變,每個裝置製造商也可能選擇以自家演算法編寫值區劃分應用程式。建議您改為確保無論所在值區為何,應用程式都能正確運作。
- 如果應用程式沒有啟動器活動,就可能完全無法升級至使用中值區。建議您重新設計應用程式,使應用程式具有此類活動。
- 如果應用程式的通知無法採取行動,使用者將無法觸發 藉由與通知互動,讓應用程式升級到使用中值區。在這種情況下,建議您重新設計幾種合適的通知,以便使用者回應。如要瞭解相關準則,請參閱 Material Design 的通知設計模式說明。
同樣地,如果應用程式在收到 高優先順序 FCM 訊息 就不會讓使用者有機會與應用程式互動,進而向他們宣傳 使用中的值區事實上,高優先順序 FCM 訊息的唯一用途是 向使用者推送通知,因此最好絕不會發生這個情況。如果您在 FCM 訊息未觸發使用者互動的情況下,誤將 FCM 訊息標示為高優先順序,可能會導致其他負面後果;例如,可能導致應用程式用盡配額,導致真正緊急的 FCM 訊息被視為一般優先順序。
注意:如果使用者屢次關閉通知,系統會向使用者提供在日後封鎖該通知的選項。請不要為了將應用程式保持在安裝狀態,而傳送過多通知給使用者 使用值區!
如果應用程式分散在多個套件中,這些套件可能會 因此具有不同的存取層級請務必 能否使用指派給不同值區的套件來測試這類應用程式,確保 應用程式正常運作。
改善省電模式
Android 9 對省電模式進行了多項改善。具體限制是由裝置製造商決定。舉例來說,在 AOSP 版本中,系統會套用下列限制:
- 系統會更積極地將應用程式置於應用程式待機模式,而非等待應用程式閒置。
- 背景執行限制適用於所有應用程式 (無論應用程式的目標 API 為何) 第二,自訂角色只能 套用至專案或機構
- 螢幕關閉時,定位服務可能會停用。
- 背景應用程式無法存取網路。
此外,還有其他裝置專屬的電源最佳化設定,如需完整詳細資料,請參閱說明電源管理限制的頁面。
如往常一樣,建議您在啟用節約耗電量模式時測試應用程式。您可以透過裝置的「設定」>「省電模式」畫面,手動開啟省電模式。
測試及疑難排解
新的電源管理功能會影響在 Android 9 裝置上執行的所有應用程式,無論應用程式是否指定 Android 9 都會受到影響。請務必確認應用程式能正常運作 能夠在這些裝置上正常使用
請務必在多種情況下測試應用程式的主要用途,才能 電源管理功能之間的互動方式。您可以使用 Android 裝置 Debug Bridge 指令會 就會開啟和關閉這些功能
Android Debug Bridge 指令
您可以使用 Android Debug Bridge 殼層指令,測試多個電源管理功能。
如要瞭解如何使用 ADB 讓裝置進入打盹模式,請參閱 使用打盹和應用程式待命功能進行測試。
應用程式待命值區
您可以使用 ADB,將應用程式手動指派至應用程式待命值區。 如要變更應用程式的值區,請使用下列指令:
$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare
您也可以使用該指令,一次設定多個套件:
$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...
如要查看應用程式所在的值區,請執行以下程式碼:
$ adb shell am get-standby-bucket [packagename]
如未傳遞 packagename 參數,指令會列出所有應用程式的值區。應用程式也可以呼叫
新方法
UsageStatsManager.getAppStandbyBucket()
。
省電模式
您可以使用多個指令,測試應用程式在低電量情況下的行為。
如要模擬未接上電源的裝置,請使用下列指令
$ adb shell dumpsys battery unplug
如要測試裝置在低電量時的行為,請使用下列指令:
$ adb shell settings put global low_power 1
測試完成後,您就可以復原手動調整的裝置設定 執行下列指令:
$ adb shell dumpsys battery reset