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.