App-Ruhezustand

Ein durchschnittlicher Android-Benutzer installiert mehr als 50 Apps auf seinen Geräten (die Zahl steigt mit zunehmender RAM-Stufe der Geräte). Allerdings bleiben viele dieser Apps vom Benutzer über einen längeren Zeitraum ungenutzt.

Beim App-Ruhezustand werden Apps, die der Benutzer einige Monate lang nicht verwendet, in den Ruhezustand versetzt, ähnlich wie beim automatischen Widerruf von Berechtigungen. Dadurch wird die App zwangsweise gestoppt und in einen Zustand versetzt, in dem wir die Speicherung und nicht die Leistung optimieren. Der automatische Widerruf der Berechtigung ist ebenfalls in diesem Status enthalten und sie verfügen über dieselbe Ausnahmeeinstellung in den Einstellungen . Eine erzwungen gestoppte 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 wie gewohnt erneut ausgeführt. Alle Jobs/Warnungen/Benachrichtigungen, die geplant wurden, bevor die App in den Ruhezustand wechselte, 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 Möglichkeiten zum Aufwecken einer App, die nicht in AOSP enthalten sind, kann die Genauigkeit des App-Ruhezustands beeinträchtigen
  • Der proprietäre Einschränkungsmechanismus eines OEMs, ähnlich dem App-Ruhezustand, kann einen ähnlichen Zweck erfüllen. Obwohl beides existieren kann, kann es zu Überschneidungen kommen.

CDD beschreibt eine Reihe neuer Anforderungen für Änderungen, die auf der App-Nutzung basieren, ähnlich der bestehenden Anforderung 3.5.1 . Der App-Ruhezustand folgt diesen Anforderungen.

Der Framework-Code befindet sich in:

Die politische Logik lebt in:

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

Architektur auf hohem Niveau

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

  • Berechtigungen automatisch widerrufen
  • Erzwingen Sie das Stoppen 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 den Launcher und andere Oberflächen mit intakten App-Daten zur Verfügung steht. Nach dem Start der App stellen wir den Force-Stop-Status wieder her und fahren wie gewohnt mit der Erstellung der ODEX- und VDEX-Dateien fort.

Der geplante Entwurf besteht aus zwei Hauptteilen:

  • Bestimmen, wann ein Paket in den Ruhezustand versetzt werden soll
  • Optimierung des Winterschlafpakets

Ein neuer Systemdienst, AppHibernationService , und ein Jobdienst, AppHibernationJobService, in PermissionController sind der Klebstoff, der die gesamte Entscheidungsfindung und Logik steuert.

Die Bestimmung, wann ein Paket in den Ruhezustand versetzt werden soll, wird hauptsächlich von UsageStatsService unterstützt und von AppHibernationJobService in PermissionController verwaltet. Diese Richtlinienlogik befindet sich im PermissionController , um uns eine dynamische Aktualisierung über Mainline zu ermöglichen. 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 werden alle tatsächlichen Einsparungen/Optimierungen vorgenommen. AppHibernationService kommuniziert mit verschiedenen Teilen des Systems, um das Paket zu stoppen, Cache-Daten zu löschen, ART-Artefakte zu löschen usw. Der Widerruf der Berechtigung wird direkt von AppHibernationJobService initiiert, um die Funktion zum automatischen Widerruf auf Geräten mit Android 11 und niedriger beizubehalten.

Benutzererfahrung

Der Benutzer erhält sowohl Informationen als auch Kontrolle 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 wechseln, um entweder die App zu öffnen und aus dem Ruhezustand zu holen oder bei Bedarf die nicht verwendete App zu löschen.

Wir unterstützen weiterhin die Absicht des Entwicklers, den Benutzer über die bestehende Ausnahmeabsicht zum automatischen Widerrufen von Berechtigungen um eine Ausnahme vom Ruhezustand zu bitten.

Rückwärtskompatibilität

Ruhezustandsspezifische Funktionen sind ab Android 12 verfügbar. Diese Funktion konnte in früheren Versionen nicht funktionieren, da die Plattformkomponenten (z. B. der neue Systemdienst) nicht vorhanden sind. Der automatische Widerruf funktioniert weiterhin so, wie er derzeit für frühere Betriebssystemversionen implementiert ist.

Um die Abwärtskompatibilität sicherzustellen, wird ab Android 12 auf der Seite der App unter „Apps & Benachrichtigungen“ in den Einstellungen ein Schalter für den Ruhezustand hinzugefügt, während der ursprüngliche Schalter für den automatischen Widerruf im Untermenü „ Berechtigungen“ beibehalten wird. Dieser Schalter steuert die allgemeine Systemausnahme für den App-Ruhezustand für die App.

Anpassen

Da ein Teil der Implementierung Teil einer modularen Systemkomponente ist, wird den Partnern davon abgeraten, die Funktion zu ändern. Partner können stattdessen ähnliche Features/Funktionalitäten implementieren, solange sie die CDD-Anforderungen einhalten.

Der App-Ruhezustand sollte für alle Apps, die auf Android 11 oder höher ausgerichtet sind, standardmäßig auf EIN stehen. Dies entspricht dem automatischen Widerruf von Berechtigungen. Auch wenn die Einstellung selbst aktiviert sein kann, kann sich die Implementierung des App-Ruhezustands zwischen Apps für Android 11 und Android 12 unterscheiden. Genauer gesagt funktioniert der App-Ruhezustand nur für Apps für Android 11, während es sich bei Apps für Android 12 im Wesentlichen nur um einen automatischen Widerruf handelt.

Darüber hinaus implementieren OEMs möglicherweise eine ähnliche Funktion. Diese Funktionen zielen jedoch auf einen viel kürzeren Zeitrahmen für Batterieoptimierungen ab, die OEM-spezifisch sein können. Alle ähnlichen, von OEMs entwickelten App-Einschränkungsfunktionen können mit dem App-Hibernation-System koexistieren, solange sie die in CDD definierten bestehenden Kriterien erfüllen.

Testen

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