快取應用程式凍結器

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 setProcessFrozenenableFreezer。如要進一步瞭解這些 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\)"