Energiespareinstellungen

Android 9 (API-Level 28) bietet neue Funktionen zur Verbesserung der Energieverwaltung für Geräte. Diese Änderungen und Funktionen, die bereits in früheren Versionen vorhanden waren, tragen dazu bei, dass Systemressourcen den Anwendungen bereitgestellt werden, die sie am meisten benötigen.

Die Funktionen für den Energiesparmodus lassen sich in zwei Kategorien unterteilen:

App-Standby-Buckets
Das System schränkt den Zugriff von Apps auf Geräteressourcen wie CPU oder Akku auf der Grundlage von Nutzungsmustern des Nutzers ein. Dies ist eine neue Funktion für Android 9.
Verbesserungen beim Energiesparmodus
Wenn der Energiesparmodus aktiviert ist, werden Einschränkungen für alle Apps festgelegt. Dies ist eine bestehende Funktion, die in Android 9 verbessert wurde.

App-Standby-Buckets

Mit Android 9 wird eine neue Funktion zur Akkuverwaltung eingeführt: App-Standby-Buckets. App-Standby-Buckets helfen dem System, Anfragen von Anwendungen nach Ressourcen basierend darauf zu priorisieren, wie lange und wie oft die Anwendungen verwendet werden. Basierend auf den App-Nutzungsmustern wird jede App einem von fünf Prioritätsgruppen zugeordnet. Die für die einzelnen Apps verfügbaren Geräteressourcen werden vom System abhängig davon begrenzt, in welchem Bucket sich die App befindet.

Mit den fünf Buckets werden Anwendungen nach den folgenden Merkmalen in Gruppen eingeteilt:

Aktiv

Eine Anwendung befindet sich im aktiven Bucket, wenn der Nutzer sie gerade verwendet. Beispiel:

  • Die App hat eine Aktivität gestartet
  • Die App führt einen Dienst im Vordergrund aus
  • Die App hat einen Synchronisierungsadapter, der mit einem Contentanbieter verknüpft ist, der von einer App im Vordergrund verwendet wird.
  • Der Nutzer klickt auf eine Benachrichtigung der App.

Wenn sich eine Anwendung im aktiven Bucket befindet, legt das System keine Einschränkungen für die Jobs, Alarme oder FCM-Nachrichten der Anwendung fest.

Arbeitssatz

Eine Anwendung befindet sich im Bucket des Arbeitssatzes, wenn sie häufig ausgeführt wird, aber derzeit nicht aktiv ist. Beispielsweise befindet sich eine Social-Media-App, die der Nutzer an den meisten Tagen startet, wahrscheinlich im Arbeits-Dataset. Anwendungen werden auch zum Bucket für das Arbeitsset hochgestuft, wenn sie indirekt verwendet werden.

Wenn sich eine App im Arbeitssatz befindet, schränkt das System die Möglichkeit ein, Jobs auszuführen und Alarme auszulösen. Weitere Informationen finden Sie unter Einschränkungen für die Energieverwaltung.

Häufig

Eine Anwendung befindet sich im Bucket, wenn sie regelmäßig, aber nicht unbedingt jeden Tag verwendet wird. Beispielsweise könnte sich eine Trainings-Tracking-App, die der Nutzer im Fitnessstudio ausführt, in diesem Bucket befinden.

Wenn sich eine Anwendung in einem häufig genutzten Bucket befindet, schränkt das System die Möglichkeit, Jobs auszuführen und Alarme auszulösen, stärker ein. Außerdem werden FCM-Nachrichten mit hoher Priorität begrenzt. Weitere Informationen finden Sie unter Einschränkungen für die Energieverwaltung.

Selten

Eine Anwendung befindet sich im seltenen Bucket, wenn sie nicht häufig verwendet wird. Zum Beispiel könnte eine Hotel-App, die der Nutzer nur während seines Aufenthalts in diesem Hotel ausführt, in dem seltenen Bucket enthalten sein.

Wenn sich eine Anwendung im seltenen Bucket befindet, erzwingt das System strenge Einschränkungen für die Ausführung von Jobs, das Auslösen von Alarmen und den Empfang von FCM-Nachrichten mit hoher Priorität. Das System schränkt auch die Möglichkeiten der App ein, sich mit dem Internet zu verbinden. Weitere Informationen finden Sie unter Einschränkungen für die Energieverwaltung.

Nie

Anwendungen, die installiert, aber nie ausgeführt wurden, werden dem Bucket „Nie“ zugewiesen. Das System schränkt diese Apps stark ein.

Das System weist jede Anwendung dynamisch einem Prioritäts-Bucket zu und weist die Anwendungen nach Bedarf neu zu. Das System kann auf eine vorab geladene Anwendung zurückgreifen, die mithilfe von maschinellem Lernen bestimmt, wie wahrscheinlich jede Anwendung verwendet wird, und die Anwendungen den entsprechenden Buckets zuweist. Wenn die System-App nicht auf einem Gerät vorhanden ist, sortiert das System Apps standardmäßig anhand der letzten Zeit, die sie verwendet haben. Den Buckets werden mehr aktive Anwendungen zugewiesen, die den Anwendungen eine höhere Priorität geben. Dadurch stehen der Anwendung mehr Systemressourcen zur Verfügung. Insbesondere bestimmt der Bucket, wie häufig die Jobs der Anwendung ausgeführt werden, wie oft die Anwendung Alarme auslösen kann und wie oft die Anwendung Firebase Cloud Messaging (FCM)-Nachrichten mit hoher Priorität empfangen kann. Diese Einschränkungen gelten nur, solange das Gerät im Akkubetrieb ist. Während des Ladevorgangs werden die Apps nicht vom System angewendet.

Jeder Hersteller kann eigene Kriterien dafür festlegen, wie inaktive Anwendungen Buckets zugewiesen werden. Sie sollten nicht versuchen, zu beeinflussen, welchem Bucket Ihre Anwendung zugewiesen wird. Konzentrieren Sie sich stattdessen darauf, dass sich Ihre Anwendung in dem Bucket, in dem sie sich befindet, gut verhält. Durch Aufrufen der neuen Methode UsageStatsManager.getAppStandbyBucket() kann Ihre Anwendung ermitteln, in welchem Bucket sie sich derzeit befindet.

Best Practices

Wenn Ihre App bereits die Best Practices für Stromsparmodus und App-Standby umsetzt, sollte sich der Umgang mit den neuen Funktionen zur Energieverwaltung nicht schwierig gestalten. Einige App-Verhalten, die zuvor gut funktioniert haben, können jetzt jedoch zu Problemen führen.

  • Versuchen Sie nicht, das System so zu manipulieren, dass die Anwendung in einen oder einen anderen Bucket verlagert wird. Die Bucketing-Methoden des Systems können sich ändern und jeder Gerätehersteller könnte eine eigene Bucketing-App mit einem eigenen Algorithmus schreiben. Sorgen Sie stattdessen dafür, dass Ihre Anwendung unabhängig von dem Bucket, in dem sie sich befindet, korrekt funktioniert.
  • Wenn eine Anwendung keine Launcher-Aktivität hat, wird sie möglicherweise nie zum aktiven Bucket hochgestuft. Möglicherweise möchten Sie Ihre App so umgestalten, dass sie eine solche Aktivität bietet.
  • Wenn die Benachrichtigungen der Anwendung nicht umsetzbar sind, können Nutzer die Hochstufung der Anwendung zum aktiven Bucket nicht auslösen, indem sie mit den Benachrichtigungen interagieren. In diesem Fall kann es sinnvoll sein, einige geeignete Benachrichtigungen so umzugestalten, dass sie eine Antwort des Nutzers zulassen. Einige Richtlinien findest du in den Designmustern für Benachrichtigungen in Material Design.
  • Ebenso wenig hat die Anwendung, wenn die Anwendung beim Empfang einer FCM-Nachricht mit hoher Priorität eine Benachrichtigung anzeigt, dem Nutzer keine Möglichkeit, mit der Anwendung zu interagieren und sie somit zum aktiven Bucket hochzustufen. FCM-Nachrichten mit hoher Priorität werden ausschließlich dafür verwendet, eine Benachrichtigung an den Nutzer zu senden. Daher sollte diese Situation nie eintreten. Wenn Sie eine FCM-Nachricht unangebracht mit hoher Priorität markieren, obwohl sie keine Nutzerinteraktion auslöst, kann dies andere negative Auswirkungen haben, z. B. dazu, dass Ihre Anwendung ihr Kontingent erschöpft und wirklich dringende FCM-Nachrichten mit normaler Priorität behandelt werden.

    Hinweis:Wenn der Nutzer eine Benachrichtigung wiederholt schließt, bietet das System ihm die Möglichkeit, diese Benachrichtigung in Zukunft zu blockieren. Senden Sie dem Nutzer keinen Spam mit Benachrichtigungen, nur um zu versuchen, Ihre Anwendung im aktiven Bucket zu belassen.

  • Wenn Anwendungen auf mehrere Pakete aufgeteilt sind, können sich diese Pakete in verschiedenen Buckets befinden und daher unterschiedliche Zugriffsebenen haben. Sie sollten solche Anwendungen unbedingt mit den Paketen testen, die verschiedenen Buckets zugewiesen sind, um sicherzustellen, dass die Anwendung ordnungsgemäß funktioniert.

Verbesserungen beim Energiesparmodus

Unter Android 9 wurden eine Reihe von Verbesserungen am Energiesparmodus vorgenommen. Die genauen Einschränkungen werden vom Gerätehersteller festgelegt. Bei AOSP-Builds wendet das System beispielsweise die folgenden Einschränkungen an:

  • Das System versetzt Anwendungen aggressiver in den Standby-Modus der Anwendung, anstatt darauf zu warten, dass die Anwendung inaktiv ist.
  • Die Ausführungslimits im Hintergrund gelten für alle Anwendungen, unabhängig von ihrem Ziel-API-Level.
  • Standortdienste können bei ausgeschaltetem Bildschirm deaktiviert sein.
  • Hintergrund-Apps haben keinen Netzwerkzugriff.

Darüber hinaus gibt es weitere gerätespezifische Leistungsoptimierungen. Weitere Informationen finden Sie auf der Seite mit den Einschränkungen der Energieverwaltung.

Wie immer ist es empfehlenswert, die App im Energiesparmodus zu testen. Sie können den Energiesparmodus manuell auf dem Gerät unter Einstellungen > Energiesparmodus aktivieren.

Tests und Fehlerbehebung

Die neuen Funktionen für die Energieverwaltung gelten für alle Apps, die auf Geräten mit Android 9 ausgeführt werden, unabhängig davon, ob die Apps auf Android 9 ausgerichtet sind. Es ist wichtig, dass deine App auf diesen Geräten richtig funktioniert.

Testen Sie die Hauptanwendungsfälle Ihrer App unter verschiedenen Bedingungen, um zu sehen, wie die Energieverwaltungsfunktionen miteinander interagieren. Mit Android Debug Bridge-Befehlen können Sie einige der Funktionen aktivieren und deaktivieren.

Android Debug Bridge-Befehle

Sie können mit Android Debug Bridge-Shell-Befehlen mehrere Funktionen der Energieverwaltung testen.

Informationen dazu, wie Sie ADB verwenden, um Ihr Gerät in den Stromsparmodus zu versetzen, finden Sie unter Test mit Stromsparmodus und App-Standby.

App-Standby-Buckets

Sie können ADB verwenden, um Ihre App manuell einem App-Standby-Bucket zuzuweisen. Verwenden Sie den folgenden Befehl, um den Bucket einer Anwendung zu ändern:

$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare

Sie können diesen Befehl auch verwenden, um mehrere Pakete gleichzeitig festzulegen:

$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...

Führen Sie folgenden Befehl aus, um zu prüfen, in welchem Bucket sich eine Anwendung befindet

$ adb shell am get-standby-bucket [packagename]

Wird kein packagename-Parameter übergeben, werden mit dem Befehl die Buckets für alle Anwendungen aufgelistet. Eine Anwendung kann ihren Bucket auch zur Laufzeit ermitteln, indem sie die neue Methode UsageStatsManager.getAppStandbyBucket() aufruft.

Energiesparmodus

Es gibt mehrere Befehle, mit denen Sie testen können, wie sich Ihre App bei niedrigem Energieverbrauch verhält.

Verwenden Sie den Befehl, um zu simulieren, dass das Gerät getrennt wird.

$ adb shell dumpsys battery unplug

Verwenden Sie diesen Befehl, um zu testen, wie sich das Gerät bei niedrigem Energieverbrauch verhält:

$ adb shell settings put global low_power 1

Nach dem Testen können Sie Ihre manuellen Geräteeinstellungen mit diesem Befehl rückgängig machen:

$ adb shell dumpsys battery reset