Standort für Akku optimieren

Die Hintergrundposition Einschränkungen, die in Unter Android 8.0 (API-Level 26) geht es wieder um die Frage, Die Nutzung der Standortdienste wirkt sich auf den Akkuverbrauch aus. Auf dieser Seite geht es um einen Ort Best Practices für Dienste und was Sie jetzt tun können, um die Akkulaufzeit Ihrer Apps zu verlängern effizient zu gestalten. Die Anwendung dieser Best Practices wirkt sich Plattformversion, auf der sie ausgeführt wird.

Mit den Beschränkungen für die Standortermittlung im Hintergrund in Android 8.0 wurden folgende Änderungen eingeführt:

  • Die Erfassung der Standortermittlung im Hintergrund wird gedrosselt und der Standort wird berechnet und nur wenige Male pro Stunde ausgeliefert.
  • WLAN-Scans sind konservativer und Standortaktualisierungen werden nicht berechnet, bleibt das Gerät mit demselben statischen Zugangspunkt verbunden.
  • Die Reaktionsfähigkeit bei Geofencing ändert sich von wenigen Sekunden auf etwa zwei Sekunden Minuten Durch diese Änderung wird die Akkuleistung spürbar verbessert – bis zu zehnmal auf einigen Geräten besser ist.

Auf dieser Seite wird davon ausgegangen, dass Sie die Standortdienste von Google verwenden. APIs, die eine höhere Genauigkeit und eine geringere Batteriebelastung als der Standort des Frameworks APIs In wird davon ausgegangen, dass Sie mit dem Anbieter für kombinierte Standortbestimmung vertraut sind. API das Signale von GPS, WLAN und Mobilfunknetzen sowie Beschleunigungsmesser, Gyroskop, Magnetometer und andere Sensoren. Außerdem sollten Sie vertraut mit dem Geofencing API, die auf dem zusätzlich zur Fused Location Provider API und für den Akku optimiert die Leistung.

Schnelle Akkuentladung

Die Standortermittlung und die schnelle Akkuentladung haben einen direkten Zusammenhang: Aspekten:

  • Genauigkeit: Die Genauigkeit der Standortdaten. Im Allgemeinen gilt: Je höher der desto höher ist der Akkuverbrauch.
  • Häufigkeit: Wie oft der Standort berechnet wird. Der häufigere Standort ist desto höher ist der Akkuverbrauch.
  • Latenz: Wie schnell Standortdaten übermittelt werden. Weniger Latenz erfordert in der Regel Akku hält.

Richtigkeit

Sie können die Standortgenauigkeit angeben, indem Sie die setPriority() und übergeben Sie einen der folgenden Werte als Argument:

  • PRIORITY_HIGH_ACCURACY den genauesten Standort liefert, der mithilfe von je nach Bedarf viele Eingaben (GPS, WLAN und Mobilfunkverbindung und verwendet einen Vielfalt von Sensoren) und können zu und der Akku entlädt sich erheblich.
  • PRIORITY_BALANCED_POWER_ACCURACY liefert den genauen Standort und optimiert gleichzeitig die Stromversorgung. Wird sehr selten verwendet GPS Zur Berechnung wird in der Regel eine Kombination aus WLAN- und Mobilfunkinformationen verwendet. Gerätestandort.
  • PRIORITY_LOW_POWER ist größtenteils auf Mobilfunkmasten angewiesen und vermeidet GPS- und WLAN-Eingänge. grobe Genauigkeit (auf Stadtebene) mit minimaler Akkuentladung.
  • PRIORITY_NO_POWER empfängt Standorte passiv von anderen Apps, für die die Standortermittlung bereits berechnet.

Die Standortanforderungen der meisten Apps können durch die ausgewogene Leistung oder Optionen für die Stromversorgung. Hohe Genauigkeit sollte für Anwendungen reserviert werden, die in der und erfordern eine Echtzeit-Standortaktualisierung, z. B. eine Kartenmarkierung. App).

Häufigkeit

Sie haben zwei Möglichkeiten, die Häufigkeit für Standorte festzulegen:

  • Verwenden Sie die Methode setinterval() Methode zum Angeben des Intervalls, in dem der Standort für Ihre App berechnet wird.
  • Verwenden Sie die Methode setFastestInterval() um das Intervall anzugeben, in dem der Standort für andere Apps berechnet wird an Ihre App ausgeliefert.

Sie sollten den größtmöglichen Wert übergeben, wenn Sie setInterval() verwenden. Dies ist Dies gilt insbesondere für die Erfassung der Standortermittlung im Hintergrund. und der Akku entlädt sich. Intervalle von wenigen Sekunden sollten nur für Anwendungsfälle im Vordergrund. In Android 8.0 eingeführte Beschränkungen für die Standortermittlung im Hintergrund diese Strategien umzusetzen. Deine App sollte sie aber auf Android-Geräten erzwingen. Geräte mit Android 7.0 oder niedriger.

Latenz

Sie können die Latenz mithilfe der Methode setMaxWaitTime() und in der Regel einen Wert übergeben, der um ein Vielfaches größer als das Intervall ist, in den setInterval() . Diese Einstellung verzögert die Zustellung an den Standort und es kann sein, dass mehrere Standortaktualisierungen in Stapeln bereitgestellt werden. Durch diese beiden Änderungen wird der Akkuverbrauch minimiert.

Wenn deine App nicht sofort ein Standortupdate benötigt, solltest du die dem höchstmöglichen Wert zur setMaxWaitTime()-Methode hinzu, für eine bessere Datennutzung und eine höhere Akkueffizienz.

Bei der Verwendung von Geofences sollten Anwendungen einen großen Wert an den setNotificationResponsiveness() um Strom zu erhalten. Wir empfehlen einen Wert von mindestens fünf Minuten.

Anwendungsfälle für Standorte

In diesem Abschnitt werden einige typische Szenarien bei der Standorterfassung beschrieben. Empfehlungen für die optimale Nutzung des Geofencing-Anbieters und des Anbieters für kombinierte Standortbestimmung APIs

Für Nutzer sichtbare Updates oder Updates im Vordergrund

Beispiel: Eine Karten-App, die häufige, genaue Updates mit sehr geringen Latenz. Alle Updates finden im Vordergrund statt: Der Nutzer startet eine Aktivität, verbraucht Standortdaten und beendet die Aktivität dann nach kurzer Zeit.

Verwenden Sie die Methode setPriority() mit dem Wert PRIORITY_HIGH_ACCURACY oder PRIORITY_BALANCED_POWER_ACCURACY

Das in den setInterval() hängt vom Anwendungsfall ab: Setzen Sie den Wert für Echtzeitszenarien auf wenige Sekunden Andernfalls sollten Sie sich auf wenige Minuten (ca. zwei Minuten oder wird empfohlen, um den Akkuverbrauch zu minimieren.

Standort des Geräts ermitteln

Beispiel: Eine Wetter-App möchte den Standort des Geräts ermitteln.

Verwenden Sie die Methode getLastLocation() , die den zuletzt verfügbaren Standort zurückgibt. In seltenen Fällen Cases können null sein) . Diese Methode bietet eine einfache Möglichkeit, den Standort und verursacht keine Kosten für die aktive Anforderung von Standortaktualisierungen. Verwenden Sie in Verbindung mit der isLocationAvailable() , die true zurückgibt, wenn der von getLastLocation() relativ aktuell sind.

Updates starten, wenn sich ein Nutzer an einem bestimmten Standort befindet

Beispiel: Updates werden angefordert, wenn sich ein Nutzer innerhalb einer bestimmten Entfernung von Arbeit, Zuhause oder an einem anderen Ort.

Geofencing in Verbindung mit der Funktion „fusioniert“ verwenden Updates des Anbieters für Standortdienste Updates anfordern, wenn die App einen Geofence empfängt Einstiegstrigger und Entfernen von Updates, wenn die App einen Geofence-Exit erhält auslösen. Dadurch wird sichergestellt, dass die App nur dann detailliertere Standortaktualisierungen erhält, wenn wenn der Nutzer ein festgelegtes Gebiet betreten hat.

Der typische Workflow für dieses Szenario könnte das Einblenden einer Benachrichtigung nach dem Geofence-Wechsel und dem Start einer Aktivität, die Code zum Anfordern von Aktualisierungen, wenn der Nutzer auf die Benachrichtigung tippt.

Updates basierend auf dem Aktivitätsstatus des Nutzers starten

Beispiel: Nur dann Updates anfordern, wenn der Nutzer ein Auto fährt oder fährt mit dem Fahrrad.

Die Aktivitätserkennung verwenden API in in Verbindung mit Aktualisierungen des Anbieters für kombinierte Standortbestimmung. Aktualisierungen anfordern, wenn das Zielaktivität erkannt wird und Updates entfernt werden, wenn der Nutzer aufhört diese Aktivität ausführen.

Der typische Workflow für diesen Anwendungsfall für die erkannte Aktivität erhalten und eine Aktivität starten, enthält Code, mit dem Aktualisierungen angefordert werden, wenn der Nutzer auf die Benachrichtigung tippt.

Lang andauernde, an geografische Regionen gebundene Updates des Standorts im Hintergrund

Beispiel: Der Nutzer möchte benachrichtigt werden, wenn sich das Gerät in der Nähe befindet. eines Einzelhändlers.

Dies ist ein hervorragender Anwendungsfall für Geofencing. Da der Anwendungsfall fast und zwar die Standortermittlung im Hintergrund, addGeofences(GeofencingRequest, PendingIntent) .

Sie sollten die folgenden Konfigurationsoptionen festlegen:

  • Verwenden Sie zum Erfassen von Verweilübergängen die Methode setLoiteringDelay() übergibt einen Wert von etwa fünf Minuten oder weniger.

  • Verwenden Sie die Methode setNotificationResponsiveness(), wird ein Wert von etwa fünf Minuten übergeben. Sie sollten jedoch einen Wert um etwa zehn Minuten, wenn deine App die zusätzliche Verzögerung die Sensibilität.

Eine App kann maximal 100 Geofences gleichzeitig registrieren. Wird verwendet Wenn eine App viele Händleroptionen erfassen möchte, große Geofence (auf Stadtebene) und dynamisch kleinere Geofences (für Standorte in der Stadt) für Geschäfte in größeren Geofence. Wenn ein Nutzer einen großen Geofence betritt, können kleinere Geofences hinzugefügt werden. wenn der Nutzer den größeren Geofence verlässt, können die kleineren Geofences und Geofencings könnten für ein neues Gebiet erneut registriert werden.

Lang andauernde Updates der Standortermittlung im Hintergrund ohne sichtbare App-Komponente

Beispiel: Eine App, die den Standort passiv erfasst

Verwenden Sie die Methode setPriority() mit der Methode PRIORITY_NO_POWER wenn möglich, da sich der Akku fast nicht entlädt. Bei Verwendung PRIORITY_NO_POWER ist nicht möglich. Verwenden Sie PRIORITY_BALANCED_POWER_ACCURACY oder PRIORITY_LOW_POWER, aber vermeiden Sie es, PRIORITY_HIGH_ACCURACY dauerhafte Hintergrundarbeit, da diese Option Akku.

Falls Sie mehr Standortdaten benötigen, verwenden Sie den passiven Standort, indem Sie die Methode setFastestInterval() übergibt einen kleineren Wert als den, an den Sie übergeben. setInterval() In Kombination mit dem PRIORITY_NO_POWER kann der passive Standort opportunistisch den vom andere Apps ohne Aufpreis nutzen.

Mäßigen Sie die Häufigkeit, indem Sie eine gewisse Latenz hinzufügen. Verwenden Sie dazu die Funktion setMaxWaitTime() . Wenn Sie beispielsweise die Methode setinterval() mit dem Wert ungefähr 10 Minuten, sollten Sie setMaxWaitTime() mit einen Wert zwischen 30 und 60 Minuten. Mit diesen Optionen wird der Standort berechnet, für Ihre App ungefähr alle 10 Minuten, aber die App wird nur geweckt alle 30 bis 60 Minuten. Einige Standortdaten sind als Batch-Update verfügbar. Dieses spart Latenz gegen mehr verfügbare Daten und einen besseren Akku. die Leistung.

Häufige Updates mit hoher Genauigkeit, während der Nutzer mit anderen Apps interagiert

Beispiel: Eine Navigations- oder Fitness-App, die weiter funktioniert, wenn der Nutzer schaltet entweder den Bildschirm aus oder öffnet eine andere App.

Verwenden Sie einen Dienst im Vordergrund. Wenn möglicherweise teure Arbeit nötig ist von Ihrer App im Namen des Nutzers veröffentlicht, ist es eine empfohlenen Best Practice. Für einen Dienst im Vordergrund ist ein persistenter Benachrichtigung. Weitere Informationen finden Sie unter Benachrichtigungen Übersicht.

Best Practices für Standorte

Die Umsetzung der Best Practices in diesem Abschnitt trägt dazu bei, für Ihre App.

Standortaktualisierungen entfernen

Eine häufige Ursache für unnötigen Akkuverbrauch ist das fehlerhafte Entfernen des Standorts wenn sie nicht mehr benötigt werden. Das kann zum Beispiel passieren, onStart() der Aktivität oder onResume()-Lebenszyklus -Methoden einen Aufruf an requestlocationUpdates() ohne einen entsprechenden Aufruf removeLocationUpdates(). in den onPause()- oder onStop() Lebenszyklusmethoden.

Mit Lebenszyklus-bewussten Komponenten können Sie den Lebenszyklus der Aktivitäten in Ihrer App. Weitere Informationen finden Sie unter Handhabung von Lebenszyklen Lebenszyklusbewusste Komponenten.

Zeitlimits festlegen

Legen Sie ein angemessenes Zeitlimit fest, wenn der Standort aktualisiert wird, um eine schnelle Akkuentladung zu verhindern. aufhören sollte. Durch das Zeitlimit wird sichergestellt, dass Updates nicht auf unbestimmte Zeit fortgesetzt werden. Es schützt die App, wenn Updates angefordert, aber nicht entfernt werden (z. B. wegen eines Fehlers im Code).

Fügen Sie für eine Anfrage eines Anbieters für kombinierte Standortbestimmung ein Zeitlimit hinzu, indem Sie setExpirationDuration(), der einen Parameter empfängt, der die Zeit in Millisekunden seit dem -Methode zuletzt aufgerufen wurde. Sie können eine Zeitüberschreitung auch hinzufügen, indem Sie setExpirationTime(), Er empfängt einen Parameter, der die Ablaufzeit in Millisekunden darstellt seit dem letzten Systemstart.

Rufen Sie zum Hinzufügen einer Zeitüberschreitung zu einer Geofence-Standortanfrage die Methode setExpirationDuration() .

Batchanfragen

Für alle Anwendungsfälle, die nicht im Vordergrund stehen, können Sie mehrere Anfragen in Batches zusammenfassen. Sie können die setInterval() zur Angabe des Intervalls, in dem der Standort berechnet werden soll. Verwenden Sie dann die Methode setMaxWaitTime() um das Intervall festzulegen, in dem ein Standort an deine App geliefert wird. Die Der an die Methode setMaxWaitTime() übergebene Wert muss ein Vielfaches des Werts sein an die Methode setInterval() übergeben. Stellen Sie sich zum Beispiel Folgendes vor: Standortanfrage:

Kotlin

val request = LocationRequest()
request.setInterval(10 * 60 * 1000)
request.setMaxWaitTime(60 * 60 * 1000)

Java

LocationRequest request = new LocationRequest();
request.setInterval(10 * 60 * 1000);
request.setMaxWaitTime(60 * 60 * 1000);

In diesem Fall wird der Standort etwa alle zehn Minuten berechnet sechs Standortdaten werden etwa jede Stunde in einem Batch bereitgestellt. Auch wenn Sie weiterhin etwa alle 10 Minuten Standortaktualisierungen erhalten, sparen Sie da Ihr Gerät nur etwa stündlich geweckt wird.

Passive Standortupdates verwenden

Bei Anwendungsfällen im Hintergrund empfiehlt es sich, Standortaktualisierungen zu drosseln. Android-Geräte Diese Vorgehensweise wird durch Limits von 8.0 erzwungen. Apps, die auf älteren Geräten ausgeführt werden, sollten jedoch die Standortermittlung im Hintergrund so wenig wie möglich einzuschränken.

Während deine App im Hintergrund ausgeführt wird, ist es wahrscheinlich, dass eine andere App fordert häufig Standortaktualisierungen im Vordergrund an. Standortdienste stellt diese Updates für deine App bereit. Hier ein Beispiel: , die bei Bedarf Standortdaten nutzt:

Kotlin

val request = LocationRequest()
request.setInterval(15 * 60 * 1000)
request.setFastestInterval(2 * 60 * 1000)

Java

LocationRequest request = new LocationRequest();
request.setInterval(15 * 60 * 1000);
request.setFastestInterval(2 * 60 * 1000);

Im vorherigen Beispiel wird der Standort für Ihre App ungefähr alle 15 Minuten berechnet. Minuten Wenn andere Apps den Standort anfragen, werden die Daten Ihrer App zur Verfügung gestellt bei einem Intervall von maximal zwei Minuten.

Die passive Nutzung des Standorts führt nicht zu einer schnellen Akkuentladung, Fälle, in denen der Empfang von Standortdaten eine teure CPU oder E/A auslöst Geschäftsabläufe. Zur Minimierung der Akkukosten muss das im setFastestInterval() nicht zu klein sein.

Sie können die Akkuleistung der Geräte nach gemäß den Empfehlungen auf dieser Seite. Nutzer löschen eher nicht Apps, die ihren Akku nicht belasten.