緩存應用程序冰箱

Android 11 QPR3 或更高版本支持緩存應用程序凍結器。此功能會停止緩存進程的執行,並通過可能嘗試在緩存時運行的不當應用程序來減少資源使用。該框架通過將其進程遷移到凍結的 cgroup 來凍結緩存的應用程序;這會在存在活動緩存應用程序的情況下減少活動和空閒 CPU 消耗。可以使用系統配置標誌或開發人員選項啟用應用程序凍結。

實施應用程序凍結器

緩存的應用程序冷凍器利用內核 cgroup v2 冷凍器。帶有兼容內核的設備可以(可選)啟用它。為此,請啟用開發人員選項“暫停執行緩存的應用程序”或將設備配置標誌activity_manager_native_boot use_freezertrue 。例如:

adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot

當標誌use_freezer設置為 false 或禁用開發人員選項時,冷凍機將被禁用。您可以通過更改軟件版本或更新中的設備配置來切換此設置。

應用程序凍結器不公開官方 API(並且沒有參考實現客戶端),但使用隱藏的系統 API setProcessFrozenenableFreezer 。有關這些 API 的詳細信息,請參閱 ActivityManager 的Process.java和 ActivityManagerService API。開發者也可以參考ActivityManager中的客戶端代碼進行實驗。

處理自定義功能

通常,進程在緩存時不會執行任何工作,但某些應用程序可能具有受預期在緩存時運行的進程支持的自定義功能。在運行此類應用程序的設備上啟用應用程序凍結器時,緩存的進程將被凍結,並且可能會阻止自定義功能正常工作。

作為一種解決方法,如果應用程序有一個進程需要在緩存時執行活動,請在進程需要執行任何工作以允許應用程序之前將進程狀態更改為非緩存(例如綁定前台服務 (BFGS) 或前台)保持活躍。

測試應用程序冰櫃

要驗證應用程序冷凍器是否按預期工作,請使用以下資源:

  • 檢查/dev/freezer/frozen/cgroup.procs中的緩存進程列表。

  • 檢查/sys/fs/cgroup/uid_0/cgroup.freeze文件是否存在。

  • 查看 logcat,每次進程移入或移出冷凍機時,它都會顯示凍結/解凍的條目。例如:

    adb logcat | grep -i "\(freeze\|froze\)"