Android 11 QPR3 以上版本支援凍結已快取的應用程式。這項功能會停止執行快取的程序,並減少可能在快取期間嘗試運作的異常應用程式所使用的資源。架構會將快取應用程式的程序遷移至凍結的 cgroup,藉此凍結快取應用程式,減少作用中和閒置的 CPU 耗用量。您可以使用系統設定標記或開發人員選項啟用應用程式凍結功能。
實作應用程式凍結功能
快取應用程式凍結工具會運用核心 cgroup v2 凍結工具。如果裝置出廠時搭載相容的 Kernel,可以選擇啟用這項功能。如要啟用這項功能,請啟用「暫停執行已快取的應用程式」開發人員選項,或將裝置設定旗標 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
指令檢查凍結程序清單,並使用 grep 搜尋Apps frozen:
。檢查
/sys/fs/cgroup/uid_0/cgroup.freeze
檔案是否存在。查看 logcat,其中會顯示每次程序移入或移出凍結器時,凍結和未凍結的項目。例如:
adb logcat | grep -i "\(freezing\|froze\)"