1. 應用待機群組是啥?
Android 9 引入了一個新功能,叫應用待機群組。簡單來說,就是根據你最近使用應用的頻率和時間,系統會把應用分成不同的“群組”。每個群組的應用能用的系統資源不一樣,比如后臺任務、鬧鐘、網絡請求啥的。系統會根據你用的多少,動態調整應用在哪個群組里。
2. 群組分類及限制
系統會把應用分成五個群組,每個群組的限制不一樣。比如,你常用的應用會被分到ACTIVE群組,幾乎沒啥限制;而不常用的應用可能會被分到RARE群組,限制就多了。這些限制主要是為了省電,只有在用電池的時候才會生效,充電的時候就沒這些限制了。
3. 群組分類及限制
群組 (Bucket) | Jobs (最長運行 10 分鐘) | Alarms (最長運行 10 秒) | Network (臨時恢復時長:10 分鐘) | FCM 高優先級 |
ACTIVE | 無限制 | 無限制 | 無限制 | 無限制 |
WORKING_SET | 每 2 小時 | 每 6 分鐘 | 無限制 | 無限制 |
FREQUENT | 每 8 小時 | 每 30 分鐘 | 無限制 | 10 次/天,之后降級為普通 |
RARE | 每 24 小時 | 每 2 小時 | 每 24 小時 | 5 次/天,之后降級為普通 |
NEVER | 從不 | 從不 | 從不 | 從不 |
4. 需要注意的幾點
廠商自定義:每個手機廠商可以自己定標準,決定哪些應用是“不活躍”的。
別瞎折騰:開發者不應該試圖去影響應用在哪個群組,而是應該確保應用在當前的群組里能正常運行。
查群組:應用可以通過調用?UsageStatsManager.getAppStandbyBucket()?來查自己當前在哪個群組。
白名單例外:如果應用在低電耗模式的白名單里,那這些群組限制就不適用了。
5.五個群組的特性
以下是五個應用待機群組的詳細特性:
群組 (Bucket) | 特性描述 | 示例場景 | 系統限制 |
活躍 (Active) | 用戶當前正在使用應用,應用處于活躍狀態。 | - 應用已啟動一個 Activity - 應用正在運行前臺服務 - 應用的同步適配器與某個前臺應用使用的 content provider 關聯 - 用戶在應用中點擊了某個通知 | 無限制 系統不會對應用的作業、報警或 FCM 消息施加任何限制。 |
工作集 (Working Set) | 應用經常運行,但當前未處于活躍狀態。 | - 用戶每天都會使用的社交媒體應用 - 應用被間接使用(如通過其他應用調用) | 輕度限制 - 作業:每 2 小時運行一次 - 報警:每 6 分鐘觸發一次 - 網絡:無限制 - FCM:無限制 |
常用 (Frequent) | 應用會定期使用,但不是每天都必須使用。 | - 用戶在健身房使用的鍛煉跟蹤應用 - 每周使用幾次的應用 | 較強限制 - 作業:每 8 小時運行一次 - 報警:每 30 分鐘觸發一次 - 網絡:無限制 - FCM 高優先級:每天最多 10 次,之后降級為普通優先級 |
極少使用 (Rare) | 應用不經常使用,偶爾才會用到。 | - 用戶僅在旅行時使用的酒店應用 - 每月使用幾次的應用 | 嚴格限制 - 作業:每 24 小時運行一次 - 報警:每 2 小時觸發一次 - 網絡:每 24 小時連接一次 - FCM 高優先級:每天最多 5 次,之后降級為普通優先級 |
從未使用 (Never) | 應用安裝后從未運行過。 | - 用戶下載但從未打開過的應用 | 極強限制 - 作業:從不運行 - 報警:從不觸發 - 網絡:從不連接 - FCM:從不接收 |
簡單總結一下:應用待機群組根據應用的使用頻率和活躍狀態,將應用分為五個等級。常用的應用資源多,不常用的資源少,這樣既能保證用戶體驗,又能節省電量,一舉兩得!