Energiespareinstellungen

Android 9 (API-Ebene 28) bietet neue Funktionen zur Verbesserung der Geräteenergieverwaltung. Diese sowie Funktionen, die in früheren Versionen verfügbar waren, Systemressourcen werden den Apps zugewiesen, die sie am meisten benötigen.

Die Funktionen zur Energieverwaltung lassen sich in zwei Kategorien unterteilen:

App-Standby-Buckets
Das System schränkt die Zugriff auf Geräteressourcen wie CPU oder Akku, je nach Nutzungsmuster des Nutzers. Dies ist eine neue Funktion für Android 9
Verbesserungen beim Energiesparmodus
Wenn der Energiesparmodus aktiviert ist, schränkt das System alle Apps ein. Diese Funktion wurde mit Android 9 verbessert.

App-Standby-Buckets

Android 9 führt eine neue Funktion zur Akkuverwaltung ein: App-Standby-Buckets. Mit App-Standby-Buckets kann das System die für ressourcenbasierte und wie häufig die Apps verwendet wurden. Basierend auf den Nutzungsmustern der App wird jede App in einen der fünf Prioritätsbereiche eingeordnet. Das System schränkt die für jede App verfügbaren Geräteressourcen je nach Bucket ein, in dem sich die App befindet.

Bei den fünf Buckets werden Anwendungen anhand der folgenden Merkmale in Gruppen eingeteilt:

Aktiv

Eine App wird dem Bucket „aktiv“ zugeordnet, wenn der Nutzer sie gerade verwendet, z. B.:

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

Wenn sich eine App im aktiven Bucket befindet, gelten für die Jobs, Wecker oder FCM-Nachrichten der App keine Einschränkungen.

Arbeitssatz

Eine App befindet sich im Arbeitssatz-Bucket, wenn sie häufig ausgeführt wird, aber derzeit nicht aktiv ist. Eine Social-Media-App, die der Nutzer an den meisten Tagen startet, ist beispielsweise wahrscheinlich Teil des Arbeitssatzes. Apps werden auch in den Arbeitssatz hochgestuft. Bucket, wenn sie indirekt verwendet werden.

Wenn sich eine App im Arbeitssatz befindet, schränkt das System die Ausführung von Jobs und das Auslösen von Benachrichtigungen leicht ein. Weitere Informationen finden Sie unter Einschränkungen bei der Energieverwaltung:

Häufig

Eine Anwendung befindet sich im häufigen Bucket, wenn sie regelmäßig, aber nicht unbedingt verwendet wird täglich. Eine Trainings-Tracking-App, die der Nutzer im Fitnessstudio verwendet, könnte beispielsweise in den häufigen Bucket fallen.

Wenn sich eine App im Bucket „häufig“ befindet, schränkt das System die Ausführung von Jobs und das Auslösen von Benachrichtigungen stärker ein. Außerdem wird die Anzahl der FCM-Nachrichten mit hoher Priorität begrenzt. Weitere Informationen finden Sie unter Einschränkungen bei der Energieverwaltung:

Selten

Eine App wird in die Kategorie „Selten“ eingeordnet, wenn sie nicht oft verwendet wird. Eine Hotel-App, die der Nutzer nur während seines Aufenthalts in diesem Hotel ausführt, könnte beispielsweise in den seltenen Bucket fallen.

Wenn sich eine App in diesem Bucket befindet, schränkt das System die Ausführung von Jobs, das Auslösen von Alarmen und den Empfang von FCM-Nachrichten mit hoher Priorität stark ein. Außerdem schränkt das System die Fähigkeit der App ein, eine Verbindung zum Internet herzustellen. Für Weitere Informationen

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 jeder App dynamisch einen Prioritäts-Bucket zu und weist die Apps bei Bedarf neu zu. Das System kann auf einer vorinstallierten App basieren, die mithilfe von maschinellem Lernen ermittelt, wie wahrscheinlich die Verwendung der einzelnen Apps ist, und sie den entsprechenden Gruppen zuweist. Wenn die System-App nicht auf einem Gerät vorhanden ist, sortiert das System die Apps standardmäßig nach der Häufigkeit, mit der sie verwendet wurden. Buckets sind mehr aktive Anwendungen zugewiesen, die Apps eine höhere Priorität einräumen, mehr Systemressourcen für die App verfügbar sind. Insbesondere hat der Bucket legt fest, wie oft die Jobs der Anwendung ausgeführt werden und wie oft die Anwendung ausgelöst werden kann. Alarme und wie oft die App Firebase Cloud mit hoher Priorität empfangen kann FCM-Nachrichten(Messaging) Diese Einschränkungen gelten nur im Akkubetrieb. das System gelten diese Einschränkungen nicht für Apps, während das Gerät aufgeladen wird.

Jeder Hersteller kann eigene Kriterien für inaktive Apps festlegen. die Buckets zugewiesen sind. Sie sollten nicht versuchen, den Bucket zu beeinflussen, dem Ihre App zugewiesen wird. Achten Sie stattdessen darauf, dass Ihre App in jedem Bucket einwandfrei funktioniert. Ihre Anwendung kann herausfinden, in welchem Bucket sie sich derzeit befindet, indem sie die neue Methode aufrufen, UsageStatsManager.getAppStandbyBucket()

Best Practices

Wenn Sie in Ihrer App bereits die Best Practices für Doze und App-Standby befolgen, sollten die neuen Energieverwaltungsfunktionen keine Probleme bereiten. Sie können jedoch App-Verhaltensweisen, die zuvor gut funktioniert haben, können nun zu Problemen führen.

  • Versuchen Sie nicht, das System zu manipulieren, damit Ihre App in einen bestimmten Bucket eingeordnet wird. Die Bucketing-Methoden des Systems können sich ändern und jeder Gerätehersteller kann seine eigene Bucketing-App mit eigenem Algorithmus entwickeln. Achten Sie stattdessen darauf, dass sich Ihre App unabhängig von der Kategorie, in der sie sich befindet, angemessen verhält.
  • Wenn eine App keine Launcher-Aktivität hat, wird sie möglicherweise nie in den aktiven Bucket verschoben. Vielleicht möchten Sie Ihre App so umgestalten, Aktivitäten.
  • Wenn die Benachrichtigungen der App keine Aktionen ausführen, können Nutzer keine Benachrichtigungen die Hochstufung der Anwendung in den aktiven Bucket durch Interaktion mit den Benachrichtigungen. In sollten Sie einige geeignete Benachrichtigungen eine Antwort der Nutzenden. Einige Richtlinien finden Sie in der Material Design Benachrichtigungsdesign Muster.
  • Wenn die App beim Empfang einer FCM-Nachricht mit hoher Priorität keine Benachrichtigung anzeigt, hat der Nutzer keine Möglichkeit, mit der App zu interagieren und sie so in den aktiven Bucket zu verschieben. Tatsächlich besteht der einzige Verwendungszweck für FCM-Nachrichten mit hoher Priorität darin, eine Benachrichtigung an den Nutzer senden, sodass diese Situation nie eintreten sollte. Wenn Sie eine FCM-Nachricht fälschlicherweise als „hohe Priorität“ kennzeichnen, wenn sie keine Nutzerinteraktion auslöst, kann das zu anderen negativen Folgen führen. So kann es beispielsweise dazu kommen, dass Ihr App-Kontingent aufgebraucht wird und wirklich dringende FCM-Nachrichten als Nachrichten mit normaler Priorität behandelt werden.

    Hinweis: Wenn der Nutzer eine Benachrichtigung wiederholt schließt, hat er die Möglichkeit, diese Benachrichtigung in Zukunft zu blockieren. Spammen Sie Nutzer nicht mit Benachrichtigungen, nur um Ihre App im aktiven Bereich zu halten.

  • Wenn Apps auf mehrere Pakete verteilt sind, befinden sich diese Pakete möglicherweise in verschiedene Buckets und haben daher unterschiedliche Zugriffsebenen. Achten Sie darauf, Testen Sie diese Anwendungen mit den Paketen, die verschiedenen Buckets zugewiesen sind, um sicherzustellen, wie die App einwandfrei funktioniert.

Verbesserungen beim Energiesparmodus

Unter Android 9 wurden einige Verbesserungen am Energiesparmodus vorgenommen. Die genauen Einschränkungen werden vom Gerätehersteller festgelegt. Beispielsweise gelten für AOSP-Builds die folgenden Einschränkungen:

  • Das System versetzt Apps aggressiver in den App-Standbymodus, anstatt zu warten, bis die App inaktiv ist.
  • Einschränkungen bei der Hintergrundausführung gelten für alle Apps, unabhängig von ihrem Ziel-API-Level.
  • Die Standortdienste sind möglicherweise deaktiviert, wenn das Display ausgeschaltet ist.
  • Apps im Hintergrund haben keinen Netzwerkzugriff.

Außerdem gibt es weitere gerätespezifische Energieoptimierungen. Für vollständige finden Sie auf der Seite mit der Beschreibung der Energieverwaltung .

Wie immer empfiehlt es sich, Ihre App zu testen, während der Energiesparmodus aktiviert ist. Ich kann den Energiesparmodus manuell über die Einstellungen > Akku „Sparmodus“ angezeigt.

Tests und Fehlerbehebung

Die neuen Funktionen zur Energieverwaltung wirken sich auf alle Apps aus, die auf Android 9-Geräten ausgeführt werden, unabhängig davon, ob die Apps auf Android 9 ausgerichtet sind. Es ist wichtig, dass Ihre App auf diesen Geräten ordnungsgemäß funktioniert.

Testen Sie die wichtigsten Anwendungsfälle Ihrer App unter verschiedenen Bedingungen, wie die Energiesparfunktionen miteinander interagieren. Mit Android Debug Bridge-Befehlen können Sie einige der Funktionen aktivieren und deaktivieren.

Android Debug Bridge-Befehle

Sie können die Shell-Befehle von Android Debug Bridge verwenden. um verschiedene Energiesparfunktionen zu testen.

Informationen dazu, wie Sie Ihr Gerät mit ADB in den Ruhemodus versetzen, finden Sie unter Mit Doze und App-Standby testen.

App-Standby-Buckets

Sie können Ihre App mit ADB manuell einem App-Standby-Bucket zuweisen. Verwenden Sie den folgenden Befehl, um den Bucket einer App 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...

Um zu prüfen, in welchem Bucket sich eine App befindet, führen Sie

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

Wenn Sie einen packagename-Parameter nicht übergeben, listet der Befehl die Buckets für alle Anwendungen. Eine App 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 Akkustand verhält.

Verwenden Sie den Befehl

$ adb shell dumpsys battery unplug

Mit diesem Befehl können Sie testen, wie sich das Gerät bei niedrigem Akkustand verhält:

$ adb shell settings put global low_power 1

Wenn Sie die Tests abgeschlossen haben, können Sie die manuellen Geräteeinstellungen mit diesem Befehl rückgängig machen:

$ adb shell dumpsys battery reset