Android 11 QPR3 oder höher unterstützt die App-Cache-Einfrierung. Diese Funktion beendet die Ausführung für im Cache gespeicherte Prozesse und reduziert die Ressourcennutzung durch Apps mit Fehlverhalten, die möglicherweise versuchen, im Cache zu arbeiten. Das Framework friert gecachte Apps ein, indem es ihre Prozesse in eine eingefrorene cgroup migriert. Dadurch wird die aktive und inaktive CPU-Auslastung bei aktiven gecachten Apps reduziert. Der App-Freezer kann mit einem Systemkonfigurationsflag oder einer Entwickleroption aktiviert werden.
App-Einfrieren implementieren
Der Cache-App-Freezer nutzt den Kernel-cgroup v2-Freezer. Auf Geräten mit einem kompatiblen Kernel kann die Funktion (optional) aktiviert werden. Aktivieren Sie dazu die Entwickleroption „Ausführung für im Cache gespeicherte Apps anhalten“ oder setzen Sie das Gerätekonfigurationsflag activity_manager_native_boot use_freezer
auf true
. Beispiel:
adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot
Der Freezer ist deaktiviert, wenn das Flag use_freezer
auf „false“ gesetzt oder die Entwickleroption deaktiviert ist. Sie können diese Einstellung ändern, indem Sie eine Gerätekonfiguration in einem Softwarerelease oder -update ändern.
Der Apps Freezer stellt keine offiziellen APIs bereit (und hat keinen Referenzimplementierungsclient), verwendet aber die versteckten System-APIs setProcessFrozen
und enableFreezer
. Weitere Informationen zu diesen APIs finden Sie unter Process.java
von ActivityManager und der ActivityManagerService API. Entwickler können sich für Tests auch auf den Clientcode in ActivityManager
beziehen.
Benutzerdefinierte Funktionen verarbeiten
Normalerweise sollten Prozesse im Cache nicht ausgeführt werden. Einige Apps haben jedoch möglicherweise benutzerdefinierte Funktionen, die von Prozessen unterstützt werden, die im Cache ausgeführt werden sollen. Wenn der App-Freezer auf einem Gerät mit einer solchen App aktiviert ist, werden die im Cache gespeicherten Prozesse eingefroren und möglicherweise können benutzerdefinierte Funktionen nicht mehr verwendet werden.
Wenn eine App einen Prozess hat, der Aktivitäten ausführen muss, während er im Cache ist, ändern Sie den Prozessstatus in „Nicht im Cache“ (z. B. Bound ForeGround Service (BFGS) oder Vordergrund), bevor der Prozess eine Arbeit ausführen muss, damit die App aktiv bleiben kann.
App-Freezer testen
Mit den folgenden Ressourcen können Sie prüfen, ob der App-Freezer wie vorgesehen funktioniert:
Verwenden Sie den Befehl
adb shell dumpsys activity
und suchen Sie mit grep nachApps frozen:
, um eine Liste der eingefrorenen Prozesse aufzurufen.Prüfen Sie, ob die Datei
/sys/fs/cgroup/uid_0/cgroup.freeze
vorhanden ist.Sehen Sie sich „logcat“ an. Hier werden eingefrorene und nicht eingefrorene Einträge angezeigt, jedes Mal, wenn ein Prozess in den Freezer migriert oder daraus migriert. Beispiel:
adb logcat | grep -i "\(freezing\|froze\)"