App-Ruhezustand

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Ein durchschnittlicher Android-Benutzer installiert mehr als 50 Apps auf seinen Geräten (die Anzahl steigt mit zunehmender RAM-Ebene der Geräte). Eine beträchtliche Anzahl dieser Apps bleibt jedoch vom Benutzer für einen langen Zeitraum ungenutzt.

Der App-Ruhezustand versetzt Apps in den Ruhezustand, die der Benutzer einige Monate lang nicht verwendet, ähnlich wie beim automatischen Widerruf von Berechtigungen. Dadurch wird die App zwangsweise angehalten und in einen Zustand versetzt, in dem wir eher den Speicher als die Leistung optimieren. Das automatische Widerrufen von Berechtigungen ist ebenfalls mit diesem Status gebündelt und sie teilen dieselbe Ausnahmeeinstellung in Einstellungen . Eine erzwungene beendete App führt keine Jobs oder Warnungen im Hintergrund aus und kann keine Push-Benachrichtigungen senden. Wenn der Benutzer die App erneut verwendet, verlässt die App den Ruhezustand und Jobs/Warnungen/Benachrichtigungen werden wieder wie gewohnt ausgeführt. Alle Jobs/Warnungen/Benachrichtigungen, die geplant wurden, bevor die App in den Ruhezustand versetzt wurde, müssen neu geplant werden.

OEMs, die die Plattform ändern, können mit der Implementierung des App-Ruhezustands in Konflikt geraten. Zum Beispiel

  • Das Ändern der App-Nutzungsdefinition oder das Einführen von Methoden zum Aufwecken einer App, die sich nicht in AOSP befinden, kann die Genauigkeit des App-Ruhezustands beeinträchtigen
  • Der proprietäre Beschränkungsmechanismus eines OEM, der dem App-Ruhezustand ähnelt, kann einen ähnlichen Zweck erfüllen. Obwohl beide existieren können, kann es zu Überschneidungen kommen.

CDD skizziert einen neuen Satz von Anforderungen für Änderungen, die auf der App-Nutzung basieren, ähnlich der bestehenden 3.5.1- Anforderung. Der App-Ruhezustand folgt diesen Anforderungen.

Der Rahmencode lebt in:

Die Politiklogik lebt in:

  • Repo: Plattform/Pakete/Module/Berechtigung
  • Verzeichnis: PermissionController/src/com/android/permissioncontroller/hibernation

Architektur auf hohem Niveau

Der App-Ruhezustand-Systemdienst optimiert die selten verwendeten Apps eines Benutzers für die Speicherung und verhindert, dass diese Apps im Hintergrund ausgeführt werden. Um diese Ergebnisse zu erzielen, gehen wir beim Versetzen einer App in den Ruhezustand wie folgt vor:

  • Berechtigungen automatisch widerrufen
  • Erzwinge das Beenden der App
  • Löschen Sie die ODEX- und VDEX-Dateien
  • Löschen Sie den App-Cache

Unser Ziel ist es, den Ruhezustand als umkehrbare Aktion zu implementieren, sodass die App dem Benutzer weiterhin über Launcher und andere Oberflächen mit intakten App-Daten zur Verfügung steht. Beim Start der App stellen wir sie aus dem Force-Stop-Zustand wieder her und fahren wie gewohnt mit der Erstellung der ODEX- und VDEX-Datei fort.

Das geplante Design konzentriert sich auf zwei Hauptteile:

  • Festlegen, wann ein Paket in den Ruhezustand wechseln soll
  • Optimieren des Hibernating-Pakets

Ein neuer Systemdienst, AppHibernationService , und ein Auftragsdienst, AppHibernationJobService, in PermissionController bilden den Klebstoff, der die allgemeine Entscheidungsfindung und -logik steuert.

Die Bestimmung, wann ein Paket in den Ruhezustand wechseln soll, wird hauptsächlich von UsageStatsService und von AppHibernationJobService in PermissionController verwaltet. Diese Richtlinienlogik lebt in PermissionController , damit wir über Mainline dynamisch aktualisieren können. Darüber hinaus planen wir, ein neues Signal, die Komponentennutzung, hinzuzufügen, um die Nutzung der Komponenten des Pakets (z. B. Dienste, Inhaltsanbieter) als neue Metrik in UsageStatsService zu erfassen.

Bei der Optimierung eines Pakets finden alle tatsächlichen Einsparungen/Optimierungen statt. AppHibernationService kommuniziert mit verschiedenen Teilen des Systems, um das Paket zu stoppen, Cache-Daten zu löschen, ART-Artefakte zu löschen und so weiter. Der Widerruf der Berechtigung wird direkt von AppHibernationJobService initiiert, um die automatische Widerrufsfunktion auf Geräten mit Android 11 und niedriger beizubehalten.

Benutzererfahrung

Der Benutzer erhält sowohl Informationen als auch Kontrollen darüber, welche Apps in den Ruhezustand versetzt werden können.

Ähnlich wie beim automatischen Widerruf erhält der Benutzer eine Benachrichtigung darüber, welche Apps sich im Ruhezustand befinden, und hat die Möglichkeit, direkt von der Benachrichtigung aus zu den Einstellungen zu gehen, um entweder die App zu öffnen und aus dem Ruhezustand zu holen oder die nicht verwendete App bei Bedarf zu löschen.

Wir unterstützen weiterhin die Absicht des Entwicklers, den Benutzer um eine Ausnahme vom Ruhezustand zu bitten, und zwar über die Absicht der Ausnahme für das automatische Widerrufen von Berechtigungen.

Rückwärtskompatibilität

Hibernation-spezifische Features sind ab Android 12 verfügbar. Diese Features konnten auf früheren Versionen nicht funktionieren, da die Plattformkomponenten (z. B. der neue Systemdienst) nicht vorhanden sind. Das automatische Widerrufen funktioniert weiterhin so, wie es derzeit für die früheren Betriebssystemversionen implementiert ist.

Ab Android 12 wird zur Gewährleistung der Abwärtskompatibilität auf der Seite der App unter „ Apps & Benachrichtigungen “ in den Einstellungen ein Umschalter für den Ruhezustand hinzugefügt, während der ursprüngliche Umschalter für das automatische Widerrufen im Untermenü „ Berechtigungen “ beibehalten wird. Diese Umschaltfläche steuert die allgemeine App-Ruhezustand-Systemausnahme für die App.

Anpassen

Da ein Teil der Implementierung Teil der modularen Systemkomponente ist, wird Partnern davon abgeraten, die Funktion zu ändern. Partner können stattdessen ähnliche Features/Funktionen implementieren, solange sie die CDD-Anforderungen erfüllen.

Der App-Ruhezustand sollte für alle Apps, die auf Android 11 oder höher abzielen, standardmäßig aktiviert sein. Dies ist dasselbe wie das automatische Widerrufen von Berechtigungen. Während die Einstellung selbst möglicherweise aktiviert ist, kann sich die Implementierung des App-Ruhezustands zwischen Apps unterscheiden, die auf Android 11 und Android 12 abzielen. Genauer gesagt funktioniert der App-Ruhezustand nur für Apps, die auf Android 11 abzielen, während es im Wesentlichen nur eine automatische Sperrung für Apps ist, die auf Android 12 abzielen.

Darüber hinaus implementieren OEMs möglicherweise eine ähnliche Funktion. Diese Funktionen sind jedoch auf einen viel kürzeren Zeitraum für Batterieoptimierungen ausgerichtet, die OEM-spezifisch sein können. Alle ähnlichen App-Einschränkungsfunktionen, die von OEMs entwickelt wurden, können mit dem App-Ruhezustandssystem koexistieren, solange sie die bestehenden Kriterien erfüllen, die in CDD definiert sind.

Testen

Der App-Ruhezustand verfügt über CTS und Komponententests, um sicherzustellen, dass er ordnungsgemäß funktioniert.