快取應用程式冷凍室

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

實施應用程式凍結器

快取的應用程式凍結器利用核心 cgroup v2 凍結器。具有相容內核的設備可以(可選)啟用它。為此,請啟用開發人員選項「暫停執行快取的應用程式」或將裝置配置標誌activity_manager_native_boot use_freezer設為true 。例如:

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) 或前台)保持活躍。

測試應用程式凍結器

若要驗證應用程式凍結器是否如預期運作,請使用下列資源:

  • 使用adb shell dumpsys activity指令並 grep Frozen關鍵字檢查凍結程序的清單。

  • 檢查/sys/fs/cgroup/uid_0/cgroup.freeze檔案是否存在。

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

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