Für Stromsparmodus und App-Standby optimieren

Android bietet zwei Energiesparfunktionen, die die Akkulaufzeit für Nutzer verlängern, indem sie das Verhalten von Apps steuern, wenn ein Gerät nicht an eine Stromquelle angeschlossen ist: den Stromsparmodus und App-Standby. Der Stromsparmodus reduziert den Akkuverbrauch, indem er die CPU- und Netzwerkaktivität im Hintergrund für Apps verzögert, wenn das Gerät längere Zeit nicht verwendet wird. Der App-Standby verzögert die Netzwerkaktivität im Hintergrund für Apps, die in letzter Zeit nicht vom Nutzer verwendet wurden.

Während sich das Gerät im Stromsparmodus befindet, wird der Zugriff von Apps auf bestimmte akkuintensive Ressourcen bis zum Wartungsfenster verschoben. Die spezifischen Einschränkungen sind unter Einschränkungen für die Energieverwaltung aufgeführt.

Der Stromsparmodus und der App-Standby verwalten das Verhalten aller Apps, die unter Android 6.0 oder höher ausgeführt werden, unabhängig davon, ob sie speziell auf API-Level 23 ausgerichtet sind. Damit Nutzer die bestmögliche Erfahrung machen, solltest du deine App im Stromsparmodus und im App-Standby testen und gegebenenfalls Anpassungen am Code vornehmen. In den folgenden Abschnitten finden Sie weitere Details.

Informationen zum Stromsparmodus

Wenn ein Nutzer ein Gerät für eine gewisse Zeit nicht an eine Stromquelle anschließt und es nicht bewegt, während das Display ausgeschaltet ist, wechselt das Gerät in den Stromsparmodus. Im Stromsparmodus versucht das System, den Akku zu schonen, indem es den Zugriff von Apps auf Netzwerk- und CPU-intensive Dienste einschränkt. Außerdem wird verhindert, dass Apps auf das Netzwerk zugreifen, und ihre Jobs, Synchronisierungen und Standardalarme werden verschoben.

In regelmäßigen Abständen wird der Stromsparmodus für kurze Zeit beendet, damit Apps ihre zurückgestellten Aktivitäten abschließen können. Während dieses Wartungsfensters führt das System alle ausstehenden Synchronisierungen, Jobs und Alarme aus und ermöglicht Apps den Zugriff auf das Netzwerk.

Abbildung 1. Der Stromsparmodus bietet ein wiederkehrendes Wartungsfenster, in dem Apps das Netzwerk nutzen und ausstehende Aktivitäten verarbeiten können.

Nach Abschluss des Wartungsfensters wechselt das System wieder in den Stromsparmodus, wodurch der Netzwerkzugriff ausgesetzt und Jobs, Synchronisierungen und Alarme verschoben werden. Mit der Zeit plant das System Wartungsfenster seltener, was den Akkuverbrauch bei längerer Inaktivität reduziert, wenn das Gerät nicht geladen wird.

Wenn der Nutzer das Gerät durch Bewegen, Einschalten des Displays oder Anschließen eines Ladegeräts aktiviert, beendet das System den Stromsparmodus und alle Apps nehmen ihre normale Aktivität wieder auf.

Einschränkungen im Stromsparmodus

Das System wendet die folgenden Einschränkungen auf Ihre Apps an, während sie sich im Stromsparmodus befinden:

Checkliste für den Stromsparmodus

  • Verwenden Sie nach Möglichkeit Firebase Cloud Messaging (FCM) für Downstream-Messaging.
  • Wenn Ihre Nutzer eine Benachrichtigung sofort sehen müssen, verwenden Sie den Nachrichtentyp RemoteNotification. Weitere Informationen finden Sie in der FCM-Dokumentation zum Nachrichtentyp RemoteNotification.
  • Stelle in der ersten Nachrichtennutzlast genügend Informationen bereit, damit ein nachfolgender Netzwerkzugriff nicht erforderlich ist.
  • Legen Sie kritische Alarme mit setAndAllowWhileIdle() und setExactAndAllowWhileIdle() fest.
  • App im Stromsparmodus testen

App an den Stromsparmodus anpassen

Der Stromsparmodus kann sich je nach den Funktionen und Diensten, die sie verwenden, unterschiedlich auf Apps auswirken. Viele Apps funktionieren während der Stromsparmoduszyklen ohne Änderungen normal. In einigen Fällen musst du die Art und Weise optimieren, wie deine App Netzwerk, Alarme, Jobs und Synchronisierungen verwaltet. Anwendungen müssen in der Lage sein, Aktivitäten während jedes Wartungsfensters effizient zu verwalten.

Zum Planen von Weckern kannst du zwei AlarmManager-Methoden verwenden: setAndAllowWhileIdle() und setExactAndAllowWhileIdle(). Mit diesen Methoden können Sie Wecker einstellen, die auch dann ausgelöst werden, wenn sich das Gerät im Stromsparmodus befindet.

Die Einschränkung des Netzwerkzugriffs im Stromsparmodus wirkt sich wahrscheinlich auch auf deine App aus, insbesondere wenn sie auf Echtzeitnachrichten wie Tickles oder Benachrichtigungen angewiesen ist. Wenn Ihre App eine dauerhafte Verbindung zum Netzwerk benötigt, um Nachrichten zu empfangen, verwenden Sie nach Möglichkeit Firebase Cloud Messaging (FCM).

Wenn Sie prüfen möchten, ob sich Ihre App im Stromsparmodus wie erwartet verhält, können Sie mit adb-Befehlen erzwingen, dass das System in den Stromsparmodus wechselt und ihn wieder verlässt, und das Verhalten Ihrer App beobachten. Weitere Informationen finden Sie unter Mit Stromsparmodus und App-Standby testen.

App-Standby

Mit dem App-Standby kann das System feststellen, ob eine App inaktiv ist, wenn der Nutzer sie nicht aktiv verwendet. Das System trifft diese Entscheidung, wenn der Nutzer die App für einen bestimmten Zeitraum nicht berührt und keine der folgenden Bedingungen zutrifft:

  • Der Nutzer startet die App explizit.
  • Die App hat einen Prozess, der sich derzeit im Vordergrund befindet, entweder als Aktivität oder als Dienst im Vordergrund, oder der von einer anderen Aktivität oder einem anderen Dienst im Vordergrund verwendet wird.
  • Die App generiert eine Benachrichtigung, die Nutzer auf dem Sperrbildschirm oder in der Benachrichtigungsleiste sehen.

Wenn der Nutzer das Gerät an eine Stromversorgung anschließt, hebt das System den Stand-by-Modus für Apps auf, sodass sie frei auf das Netzwerk zugreifen und alle ausstehenden Jobs und Synchronisierungen ausführen können. Wenn das Gerät über einen längeren Zeitraum inaktiv ist, gewährt das System inaktiven Apps etwa einmal am Tag Netzwerkzugriff.

FCM verwenden, um mit Ihrer App zu interagieren, während das Gerät inaktiv ist

Firebase Cloud Messaging (FCM) ist ein Cloud-to-Device-Dienst, mit dem Sie Echtzeit-Downstream-Messaging zwischen Backend-Diensten und Apps auf Android-Geräten unterstützen können. FCM bietet eine einzelne, persistente Verbindung zur Cloud. Alle Anwendungen, die Echtzeit-Messaging benötigen, können diese Verbindung gemeinsam nutzen. Diese gemeinsame Verbindung optimiert den Akkuverbrauch erheblich, da mehrere Apps keine eigenen, separaten persistenten Verbindungen aufrechterhalten müssen, die den Akku schnell entladen können. Wenn Ihre App eine Messaging-Integration mit einem Backend-Dienst erfordert, empfehlen wir Ihnen daher dringend, nach Möglichkeit FCM zu verwenden, anstatt eine eigene persistente Netzwerkverbindung zu unterhalten.

FCM ist für die Verwendung mit dem Stromsparmodus und dem App-Standby-Modus optimiert. Mit dem FCM-Nachrichtentyp RemoteNotification können Sie Ihre App aktivieren, um mit dem Nutzer zu interagieren. Im Stromsparmodus oder App-Standby-Modus stellt das System die Nachricht zu und gewährt der App vorübergehend Zugriff auf Netzwerkdienste und partielle Wakelocks. Anschließend wird das Gerät oder die App wieder in den inaktiven Zustand versetzt. Für zeitkritische, für Nutzer sichtbare Benachrichtigungen sollten Sie die Nachrichtentypen RemoteNotification verwenden, um die Zustellung im Stromsparmodus zu ermöglichen. Diese Nachrichten können zu Benachrichtigungen führen. Weitere Informationen finden Sie im FCM-Leitfaden zu RemoteNotification.

Für Nachrichten, die nicht zu Benachrichtigungen führen, z. B. um App-Inhalte im Hintergrund auf dem neuesten Stand zu halten oder Datensynchronisierungen zu initiieren, verwende BackgroundSync-FCM-Nachrichten. Diese Nachrichten haben absichtlich eine niedrige Priorität und können verzögert oder gedrosselt werden, um den Akku des Geräts zu schonen.

Als allgemeine Best Practice gilt: Wenn Ihre App Downstream-Messaging erfordert, verwenden Sie FCM. Wenn Ihre App bereits FCM verwendet, achten Sie darauf, dass für Nachrichten, die zu für Nutzer sichtbaren Benachrichtigungen führen, RemoteNotification verwendet wird.

Verwenden Sie RemoteNotification nicht in den folgenden Situationen:

  • Wenn eine Benachrichtigung definitiv nicht angezeigt wird.
  • Für die sofortige Zustellung von Nachrichten, die nur den App-Status aktualisieren, z. B. um App-Inhalte im Hintergrund auf dem neuesten Stand zu halten oder Datensynchronisierungen zu initiieren.
  • Als Möglichkeit, den Endnutzer aufzufordern, Berechtigungen zu erteilen.

Unterstützung für andere Anwendungsfälle

Fast alle Apps können den Stromsparmodus unterstützen, indem sie Netzwerkverbindungen, Alarme, Jobs und Synchronisierungen verwalten und FCM-Nachrichten verwenden. Für eine kleine Anzahl von Anwendungsfällen ist dies möglicherweise nicht ausreichend. Für solche Fälle bietet das System eine konfigurierbare Liste von Apps, die teilweise von den Optimierungen des Stromsparmodus und des App-Standbys ausgenommen sind.

Eine App, die teilweise ausgenommen ist, kann das Netzwerk verwenden und während des Stromsparmodus und des App-Standbys partielle Wake Locks halten. Für die App gelten jedoch weiterhin andere Einschränkungen, genau wie für andere Apps. Beispielsweise werden die Jobs und Synchronisierungen der App auf API-Ebene 23 und niedriger zurückgestellt und die regulären AlarmManager-Alarme werden nicht ausgelöst. Eine App kann prüfen, ob sie sich derzeit auf der Ausnahmeliste befindet, indem sie isIgnoringBatteryOptimizations() aufruft.

Nutzer können die Liste der ausgenommenen Apps manuell unter Einstellungen > Akku > Akku-Optimierung konfigurieren. Alternativ bietet das System Möglichkeiten, wie Apps Nutzer um eine Ausnahme bitten können:

Eine App kann durch Aufrufen von isIgnoringBatteryOptimizations() prüfen, ob sie sich derzeit auf der Ausnahmeliste befindet.

Mit Stromsparmodus und App-Standby testen

Damit deine App für Nutzer optimal funktioniert, solltest du sie im Stromsparmodus und im App-Standby umfassend testen.

App im Stromsparmodus testen

So kannst du den Stromsparmodus testen:

  1. Konfiguriere ein Hardwaregerät oder ein virtuelles Gerät mit einem System-Image mit Android 6.0 (API-Level 23) oder höher.
  2. Verbinden Sie das Gerät mit Ihrer Entwicklungsmaschine und installieren Sie Ihre App.
  3. Führen Sie Ihre App aus und lassen Sie sie aktiv.
  4. Versetzen Sie das System mit dem folgenden Befehl in den Ruhemodus:
        $ adb shell dumpsys deviceidle force-idle
        
  5. Wenn Sie bereit sind, beenden Sie den Inaktivitätsmodus mit dem folgenden Befehl:
        $ adb shell dumpsys deviceidle unforce
        
  6. Reaktivieren Sie das Gerät mit dem folgenden Befehl:
        $ adb shell dumpsys battery reset
        
  7. Beobachte das Verhalten deiner App, nachdem du das Gerät wieder aktiviert hast. Achte darauf, dass die App ordnungsgemäß wiederhergestellt wird, wenn das Gerät den Stromsparmodus verlässt.

App mit App-Standby testen

So testen Sie den App-Stand-by-Modus mit Ihrer App:

  1. Konfiguriere ein Hardwaregerät oder ein virtuelles Gerät mit einem System-Image mit Android 6.0 (API-Level 23) oder höher.
  2. Verbinden Sie das Gerät mit Ihrer Entwicklungsmaschine und installieren Sie Ihre App.
  3. Führen Sie Ihre App aus und lassen Sie sie aktiv.
  4. Erzwinge den App-Standby-Modus für die App, indem du die folgenden Befehle ausführst:
        $ adb shell dumpsys battery unplug
        $ adb shell am set-inactive <packageName> true
        
  5. Simulieren Sie das Aufwecken Ihrer App mit den folgenden Befehlen:
        $ adb shell am set-inactive <packageName> false
        $ adb shell am get-inactive <packageName>
        
  6. Beobachten Sie das Verhalten Ihrer App, nachdem Sie sie aktiviert haben. Achte darauf, dass die App nach dem Stand-by-Modus ordnungsgemäß wiederhergestellt wird. Prüfe insbesondere, ob die Benachrichtigungen und Hintergrundjobs deiner App wie erwartet funktionieren.

Zulässige Anwendungsfälle für Ausnahmen

In der folgenden Tabelle werden mehrere Anwendungsfälle aufgeführt und es wird angegeben, ob es für Apps zulässig ist, die Intent-Aktion ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS in diesen Situationen zu verwenden. Im Allgemeinen erfüllt Ihre App diese Ausnahmen nicht, es sei denn, der Stromsparmodus oder App-Standby beeinträchtigt die Hauptfunktion der App oder es gibt einen technischen Grund, warum Ihre App keine FCM-RemoteNotification-Nachrichten verwenden kann.

Weitere Informationen finden Sie unter Unterstützung für andere Anwendungsfälle.

Typ Anwendungsfall Kann FCM verwenden? Ausnahme akzeptabel? Hinweise
Instant-Messaging-, Chat- oder Anruf-App. Erfordert die Zustellung von Echtzeitnachrichten an Nutzer, während sich das Gerät im Stromsparmodus oder die App im App-Standby befindet. Ja, mit FCM Nicht möglich Verwenden Sie FCM-RemoteNotification-Nachrichten, um die App zu aktivieren und auf das Netzwerk zuzugreifen.
Ja, aber es werden keine FCM-RemoteNotification-Nachrichten verwendet.
Instant Messaging-, Chat- oder Anruf-Apps; VoIP-Apps für Unternehmen. Nein, FCM kann aufgrund einer technischen Abhängigkeit von einem anderen Messaging-Dienst nicht verwendet werden oder der Stromsparmodus und der App-Standby beeinträchtigen die Hauptfunktion der App. Akzeptabel
Persönliche Sicherheit App Apps, die Nutzer und ihre Familien schützen. falls zutreffend. Akzeptabel
App zur Aufgabenautomatisierung. Die Hauptfunktion der App ist die Planung automatisierter Aktionen, z. B. für Instant Messaging, Sprachanrufe oder die Verwaltung neuer Fotos. falls zutreffend. Akzeptabel
Companion-App für Peripheriegeräte. Die Hauptfunktion der App besteht darin, eine dauerhafte Verbindung mit dem Peripheriegerät aufrechtzuerhalten, um dem Peripheriegerät Internetzugriff zu ermöglichen. falls zutreffend. Akzeptabel
Die App muss nur gelegentlich eine Verbindung zu einem Peripheriegerät herstellen, um Daten zu synchronisieren, oder sie muss nur eine Verbindung zu Geräten herstellen, die über Standard-Bluetooth-Profile verbunden sind, z. B. kabellose Kopfhörer. falls zutreffend. Nicht möglich