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 setProcessFrozen
和enableFreezer
。有關這些 API 的詳細信息,請參閱 ActivityManager 的Process.java
和 ActivityManagerService API。開發者也可以參考ActivityManager
中的客戶端程式碼進行實驗。
處理自訂功能
通常,進程在快取時不會執行任何工作,但某些應用程式可能具有預期在快取時運行的進程支援的自訂功能。當在執行此類應用程式的裝置上啟用應用程式凍結器時,快取的進程將被凍結,並且可能會阻止自訂功能正常運作。
作為解決方法,如果應用程式有一個進程需要在快取時執行活動,請在該進程需要執行任何工作以允許應用程式之前將進程狀態更改為非快取(例如綁定前台服務 (BFGS) 或前台)保持活躍。
測試應用程式凍結器
若要驗證應用程式凍結器是否如預期運作,請使用下列資源:
使用
adb shell dumpsys activity
指令並 grepFrozen
關鍵字檢查凍結程序的清單。檢查
/sys/fs/cgroup/uid_0/cgroup.freeze
檔案是否存在。查看 logcat,每次進程移入或移出冷凍室時,它都會顯示凍結和解凍的條目。例如:
adb logcat | grep -i "\(freezing\|froze\)"