App-Ruhezustand

Ein durchschnittlicher Android-Nutzer installiert mehr als 50 Apps auf seinen Geräten. Die Anzahl steigt mit der RAM-Klasse der Geräte. Viele dieser Apps werden jedoch über einen längeren Zeitraum nicht vom Nutzer verwendet.

Beim App-Ruhezustand werden Apps, die der Nutzer seit einigen Monaten nicht mehr verwendet hat, in den Ruhezustand versetzt. Das ist ähnlich wie beim automatischen Entziehen von Berechtigungen. Dadurch wird die App zwangsweise beendet und in einen Zustand versetzt, in dem wir den Speicherplatz anstelle der Leistung optimieren. Die automatische Aufhebung von Berechtigungen ist ebenfalls in diesem Status enthalten und die beiden Funktionen haben dieselbe Ausnahmeeinstellung in den Einstellungen. Eine erzwungene App führt keine Jobs oder Benachrichtigungen im Hintergrund aus und kann keine Push-Benachrichtigungen senden. Wenn der Nutzer die App wieder verwendet, wird der Ruhezustand beendet und Jobs, Benachrichtigungen und Mitteilungen werden wieder wie gewohnt ausgeführt. Alle Jobs, Benachrichtigungen und Hinweise, die vor dem Ruhezustand der App geplant waren, müssen neu geplant werden.

Wenn OEMs die Plattform ändern, kann dies zu Konflikten mit der Implementierung des App-Ruhezustands führen. Zum Beispiel

  • Wenn Sie die Definition der App-Nutzung ändern oder Methoden zum Aktivieren einer App einführen, die nicht in AOSP enthalten sind, kann dies die Genauigkeit des App-Ruhezustands beeinträchtigen.
  • Der proprietäre Einschränkungsmechanismus eines OEM, der dem App-Ruhezustand ähnelt, kann einen ähnlichen Zweck erfüllen. Beide können vorhanden sein, es kann jedoch zu Überschneidungen kommen.

Im CDD werden neue Anforderungen für Änderungen beschrieben, die auf der App-Nutzung basieren, ähnlich der bestehenden Anforderung 3.5.1. Für den App-Ruhezustand gelten die folgenden Anforderungen.

Der Framework-Code befindet sich in:

Die Richtlinienlogik befindet sich in:

  • repo: platform/packages/modules/Permission
  • Verzeichnis: PermissionController/src/com/android/permissioncontroller/hibernation

Gesamtarchitektur

Der Systemdienst „App-Ruhezustand“ optimiert selten verwendete Apps eines Nutzers für den Speicher und verhindert, dass diese Apps im Hintergrund ausgeführt werden. Wenn wir eine App in den Ruhezustand versetzen, gehen wir so vor:

  • Berechtigungen automatisch widerrufen
  • Beenden der App erzwingen
  • ODEX- und VDEX-Dateien löschen
  • App-Cache löschen

Unser Ziel ist es, den Ruhezustand als reversible Aktion zu implementieren, damit die App für den Nutzer weiterhin über den Launcher und andere Oberflächen mit intakten App-Daten verfügbar ist. Beim Starten der App wird sie aus dem Zustand des erzwungenen Stopps wiederhergestellt und die ODEX- und VDEX-Dateien werden wie gewohnt erstellt.

Das geplante Design konzentriert sich auf zwei Hauptbereiche:

  • Festlegen, wann ein Paket in den Ruhezustand versetzt werden soll
  • Inaktives Paket optimieren

Ein neuer Systemdienst, AppHibernationService, und ein Jobdienst, AppHibernationJobService,, inPermissionController sind die Komponenten, die die gesamte Entscheidungsfindung und Logik steuern.

Die Entscheidung, wann ein Paket in den Ruhezustand versetzt werden soll, wird hauptsächlich von UsageStatsService getroffen und von AppHibernationJobService in PermissionController verwaltet. Diese Richtlinienlogik befindet sich in PermissionController, damit wir sie dynamisch über Mainline aktualisieren können. Außerdem planen wir, ein neues Signal hinzuzufügen: die Komponentennutzung. Damit soll die Nutzung der Komponenten des Pakets (z. B. Dienste, Contentanbieter) als neuer Messwert in UsageStatsService erfasst werden.

Beim Optimieren eines Pakets werden alle tatsächlichen Einsparungen und Optimierungen vorgenommen. AppHibernationService kommuniziert mit verschiedenen Teilen des Systems, um das Paket zu beenden, Cache-Daten und ART-Artefakte zu löschen usw. Der Berechtigungsentzug wird direkt von AppHibernationJobService aus initiiert, um die Funktion zum automatischen Entziehen von Berechtigungen auf Geräten mit Android 11 und niedriger beizubehalten.

Nutzererfahrung

Der Nutzer erhält sowohl Informationen als auch Steuerelemente, mit denen er festlegen kann, welche Apps in den Ruhezustand versetzt werden können.

Ähnlich wie beim automatischen Widerruf erhält der Nutzer eine Benachrichtigung darüber, welche Apps in den Ruhemodus versetzt wurden. Er hat die Möglichkeit, über die Benachrichtigung direkt zu den Einstellungen zu gehen, um die App zu öffnen und aus dem Ruhemodus zu holen oder die nicht verwendete App bei Bedarf zu löschen.

Wir unterstützen weiterhin die Absicht des Entwicklers, den Nutzer um eine Ausnahme vom Ruhezustand zu bitten, indem wir die vorhandene Absicht für die automatische Aufhebung von Berechtigungen beibehalten.

Abwärtskompatibilität

Ab Android 12 sind spezielle Funktionen für den Ruhezustand verfügbar. Diese Funktion konnte in früheren Versionen nicht ausgeführt werden, da die Plattformkomponenten (z. B. der neue Systemdienst) nicht vorhanden sind. Das automatische Aufheben von Berechtigungen funktioniert weiterhin wie in den früheren Betriebssystemversionen.

Ab Android 12 wird zur Gewährleistung der Abwärtskompatibilität auf der Seite der App unter Apps & Benachrichtigungen in den Einstellungen ein Ein/Aus-Schalter für den Ruhezustand hinzugefügt. Der ursprüngliche Ein/Aus-Schalter für den automatischen Widerruf bleibt im Untermenü Berechtigungen erhalten. Mit dieser Ein/Aus-Schaltfläche wird die allgemeine Ausnahme des App-Ruhezustands für die App gesteuert.

Personalisierung

Ein Teil der Implementierung ist Teil einer modularen Systemkomponente. Partner sollten die Funktion daher nicht ändern. Partner können stattdessen ähnliche Funktionen implementieren, sofern sie die CDD-Anforderungen einhalten.

Der App-Ruhezustand sollte standardmäßig für alle Apps aktiviert sein, die auf Android 11 oder höher ausgerichtet sind. Das entspricht dem automatischen Widerruf von Berechtigungen. Die Einstellung selbst ist möglicherweise aktiviert, die Implementierung des App-Ruhezustands kann sich jedoch zwischen Apps, die auf Android 11 ausgerichtet sind, und Apps, die auf Android 12 ausgerichtet sind, unterscheiden. Die Funktion „App-Ruhezustand“ funktioniert nur für Apps, die auf Android 11 ausgerichtet sind. Für Apps, die auf Android 12 ausgerichtet sind, wird die Berechtigung automatisch widerrufen.

Außerdem implementieren OEMs möglicherweise eine ähnliche Funktion. Diese Funktionen sind jedoch auf einen viel kürzeren Zeitraum für Akkuoptimierungen ausgerichtet, die OEM-spezifisch sein können. Ähnliche Funktionen zur App-Einschränkung, die von OEMs entwickelt wurden, können parallel zum App-Ruhezustandssystem verwendet werden, sofern sie die im CDD definierten Kriterien erfüllen.

Testen

Für die Funktion „App-Ruhezustand“ gibt es CTS- und Unit-Tests, um sicherzustellen, dass sie richtig funktioniert.