Android 11 QPR3 oder höher unterstützt das Einfrieren von Apps im Cache. Diese Funktion stoppt die Ausführung für Prozesse im Cache und reduziert die Ressourcennutzung durch Apps mit Fehlverhalten, die möglicherweise versuchen, im Cache zu arbeiten. Das Framework friert im Cache gespeicherte Apps ein, indem ihre Prozesse in eine eingefrorene Cgroup migriert werden. Dadurch wird der aktive und inaktive CPU-Verbrauch bei aktiven im Cache gespeicherten Apps reduziert. Die App-Einfrierung kann über ein Systemkonfigurationsflag oder eine Entwickleroption aktiviert werden.
App-Gefrierschrank implementieren
Der Freezer für zwischengespeicherte Apps nutzt den Kernel-Freezer für cgroup v2. 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 legen Sie das Gerätekonfigurationsflag activity_manager_native_boot use_freezer
auf true
fest. 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 einer Softwareversion oder einem Update ändern.
Die Apps Freezer-Funktion stellt keine offiziellen APIs zur Verfügung und hat keinen Referenzimplementierungsclient, verwendet aber die verborgenen System-APIs setProcessFrozen
und enableFreezer
. Weitere Informationen zu diesen APIs finden Sie unter Process.java
von ActivityManager und in der ActivityManagerService API. Entwickler können sich auch den Clientcode in ActivityManager
für Experimente ansehen.
Benutzerdefinierte Funktionen verarbeiten
Normalerweise sollten Prozesse im Cache keine Arbeit verrichten. Einige Apps haben jedoch möglicherweise benutzerdefinierte Funktionen, die von Prozessen unterstützt werden, die im Cache ausgeführt werden sollen. Wenn die App-Gefrierfunktion auf einem Gerät aktiviert ist, auf dem eine solche App ausgeführt wird, werden die im Cache gespeicherten Prozesse eingefroren. Das kann dazu führen, dass benutzerdefinierte Funktionen nicht mehr funktionieren.
Wenn eine App einen Prozess hat, der Aktivitäten ausführen muss, während er im Cache ist, können Sie als Workaround den Prozessstatus in „Nicht im Cache“ ändern (z. B. „Bound ForeGround Service“ (BFGS) oder „Vordergrund“), bevor der Prozess eine Aufgabe ausführen muss, damit die App aktiv bleibt.
App-Gefrierfunktion testen
So prüfen Sie, ob die App-Einfrierung wie vorgesehen funktioniert:
Mit dem Befehl
adb shell dumpsys activity
und grep fürApps frozen:
können Sie eine Liste der eingefrorenen Prozesse aufrufen.Prüfen Sie, ob die Datei
/sys/fs/cgroup/uid_0/cgroup.freeze
vorhanden ist.Sehen Sie sich „logcat“ an. Dort werden eingefrorene und nicht eingefrorene Einträge angezeigt, wenn ein Prozess in den Freezer migriert oder aus dem Freezer migriert wird. Beispiel:
adb logcat | grep -i "\(freezing\|froze\)"