Energiespareinstellungen

Mit Android 9 (API-Level 28) werden neue Funktionen zur Verbesserung der Energieverwaltung von Geräten eingeführt. Diese sowie Funktionen, die in früheren Versionen verfügbar waren, Systemressourcen werden den Apps zugewiesen, die sie am meisten benötigen.

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

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. Dies ist eine bereits vorhandene Funktion, mit Android 9 verbessert.

App-Standby-Buckets

Mit Android 9 wird eine neue Funktion zur Akkuverwaltung eingeführt: App-Standby-Buckets. Mit App-Standby-Buckets kann das System die für ressourcenbasierte und wie häufig die Apps verwendet wurden. Basierend auf der App-Nutzung wird jede Anwendung einem von fünf Prioritäts-Buckets zugeordnet. Das System beschränkt die für jede Anwendung verfügbaren Geräteressourcen je nach Bucket der Anwendung ist in.

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

Aktiv

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

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

Wenn sich eine Anwendung im aktiven Bucket befindet, richtet das System keine Einschränkungen die Jobs, Alarme oder FCM-Nachrichten der App.

Arbeitssatz

Eine Anwendung befindet sich im Bucket für den Arbeitssatz, wenn sie häufig ausgeführt wird, aber derzeit nicht aktiv ist. Eine Social-Media-App, die Nutzende an den meisten Tagen starten, wahrscheinlich in der Arbeitsumgebung. Apps werden auch in den Arbeitssatz hochgestuft. Bucket, wenn sie indirekt verwendet werden.

Wenn sich eine App im Arbeitssatz befindet, wendet das System geringfügige Einschränkungen Möglichkeit, Jobs auszuführen und Alarme auszulösen. 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. Zum Beispiel eine Workout-Tracking-App, die Nutzende im Fitnessstudio laufen möglicherweise im Bucket „frequent“ enthalten.

Wenn sich eine Anwendung im häufigen Bucket befindet, gelten strengere Einschränkungen für damit Jobs ausgeführt und Alarme ausgelöst werden können. FCM-Nachrichten mit hoher Priorität. Weitere Informationen finden Sie unter Einschränkungen bei der Energieverwaltung:

Selten

Eine Anwendung befindet sich im seltenen Bucket, wenn sie nicht häufig verwendet wird. Beispiel: Eine Hotel-App dass der Nutzer nur während seiner Aufenthalt in diesem Hotel aktiv ist, kann es in den seltenen Bucket.

Befindet sich eine Anwendung im seltenen Bucket, gelten strenge Einschränkungen für seine Fähigkeit, Jobs auszuführen, Alarme auszulösen und FCM-Nachrichten mit hoher Priorität zu empfangen. 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 Anwendung dynamisch eine Prioritätsgruppe zu und weist die Anwendung Apps nach Bedarf. Das System nutzt möglicherweise eine vorab geladene App, die um zu ermitteln, wie wahrscheinlich es ist, app soll verwendet werden und weist Anwendungen den entsprechenden Buckets zu. Wenn das System nicht auf einem Gerät vorhanden ist, sortiert das System Apps wann sie zuletzt 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 für Ihre Anwendung zu beeinflussen zugewiesen ist. Konzentrieren Sie sich stattdessen darauf, dass Ihre App in allen relevanten Bucket, in dem es sich befinden könnte. Ihre Anwendung kann herausfinden, in welchem Bucket sie sich derzeit befindet, indem sie die neue Methode aufrufen, UsageStatsManager.getAppStandbyBucket()

Best Practices

Wenn Ihre App bereits die Best Practices für Stromsparmodus und App-Standby, Der Umgang mit den neuen Energieverwaltungsfunktionen sollte nicht schwierig sein. Sie können jedoch App-Verhaltensweisen, die zuvor gut funktioniert haben, können nun zu Problemen führen.

  • Versuchen Sie nicht, das System so zu manipulieren, dass Ihre App in einen Bucket gesteckt wird, oder eine andere. Die Bucketing-Methoden des Systems können sich ändern könnte der Hersteller eine eigene Bucketing-App mit Algorithmus. Stattdessen sollten Sie darauf achten, dass Ihre App unabhängig vom Bucket befindet.
  • Wenn eine App keine Launcher-Aktivität hat, wird sie möglicherweise nie im aktiven Bucket. 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 nach Erhalt einer E-Mail keine Benachrichtigung anzeigt, FCM-Nachricht mit hoher Priorität Sie geben den Nutzenden keine Möglichkeit, mit der App zu interagieren, und machen sie daher nicht dem aktiven Bucket. 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 mit hoher Priorität markieren, wenn sie nicht ausgelöst wird kann dies andere negative Konsequenzen nach sich ziehen, zum Beispiel kann das dazu führen, dass das Kontingent Ihrer App erschöpft ist, FCM-Nachrichten mit normaler Priorität behandelt werden.

    Hinweis:Wenn der Nutzer eine Benachrichtigung wiederholt schließt, wird das Symbol kann der Nutzer die Benachrichtigung zu einem späteren Zeitpunkt blockieren. Senden Sie dem Nutzer keine Benachrichtigungen, nur um zu versuchen, Ihre App in der Bucket aktiv.

  • 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. Zum Beispiel auf Für AOSP-Builds gelten die folgenden Einschränkungen:

  • Apps werden vom System aggressiver in den Standby-Modus versetzt, warten, bis die App inaktiv ist.
  • Limits für die Ausführung im Hintergrund gelten für alle Apps, unabhängig von ihrer Ziel-API
  • Die Standortdienste sind möglicherweise deaktiviert, wenn der Bildschirm ausgeschaltet ist.
  • Apps im Hintergrund haben keinen Netzwerkzugriff.

Darüber hinaus gibt es weitere gerätespezifische Leistungsoptimierungen. 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 des Energiesparmodus wirken sich auf alle Apps auf Android 9-Geräten aus, ob die Apps auf Android 9 ausgerichtet sind. Es ist wichtig, dass Ihre App gut funktioniert, 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-Befehle, um einige der aktivieren und deaktivieren.

Android Debug Bridge-Befehle

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

Informationen zur Verwendung von ADB, um dein Gerät in den Stromsparmodus zu versetzen, findest du unter Tests 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...

Um zu prüfen, in welchem Bucket sich eine Anwendung befindet, führen Sie den folgenden Befehl aus:

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

Wenn Sie einen packagename-Parameter nicht übergeben, listet der Befehl die Buckets für alle Anwendungen. Eine Anwendung kann ihren Bucket auch zur Laufzeit ermitteln, indem sie die neue Methode UsageStatsManager.getAppStandbyBucket()

Energiesparmodus

Es gibt verschiedene Befehle, mit denen Sie das Verhalten Ihrer App bei geringem Energieverbrauch testen können.

Um zu simulieren, dass das Gerät vom Stromnetz getrennt wird, verwenden Sie den Befehl

$ adb shell dumpsys battery unplug

Verwenden Sie den folgenden Befehl, um zu testen, wie sich das Gerät bei geringem Stromverbrauch verhält:

$ adb shell settings put global low_power 1

Nach dem Testen kannst du die manuellen Geräteeinstellungen rückgängig machen mit diesem Befehl:

$ adb shell dumpsys battery reset