電源管理

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 訊息視為一般優先順序。

    注意:如果使用者屢次關閉通知, 系統會讓使用者選擇日後封鎖該通知。 請不要為了將應用程式保持在安裝狀態,而傳送過多通知給使用者 使用值區!

  • 如果應用程式分散在多個套件中,這些套件可能會 因此具有不同的存取層級請務必 能否使用指派給不同值區的套件來測試這類應用程式,確保 應用程式正常運作。

改善省電模式

Android 9 針對節約耗電量模式做出多項改善。 具體限制是由裝置製造商決定。例如,在 建構 Android 開放原始碼計畫時,系統會套用下列限制:

  • 系統會更積極將應用程式設為待命模式,而不是 等待應用程式進入閒置狀態。
  • 背景執行限制適用於所有應用程式 (無論應用程式的目標 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