Standortnutzung für Akkulaufzeit optimieren

Mit den folgenden Maßnahmen können Sie die Auswirkungen Ihrer App auf die Akkulaufzeit eines Geräts bei Verwendung von Standortdiensten verbessern.

Standortaktualisierungen entfernen

Eine häufige Ursache für unnötigen Akkuverbrauch ist das Nichtentfernen von Standortaktualisierungen, wenn sie nicht mehr benötigt werden.

Das kann passieren, wenn die Lebenszyklusmethoden onStart() oder onResume() einer Aktivität einen Aufruf von requestlocationUpdates() enthalten, ohne dass in den Lebenszyklusmethoden onPause() oder onStop() ein entsprechender Aufruf von removeLocationUpdates() erfolgt.

Mit lebenszyklusorientierten Komponenten können Sie den Lebenszyklus der Aktivitäten in Ihrer App besser verwalten. Weitere Informationen finden Sie unter Lebenszyklen mit lebenszyklusorientierten Komponenten verwalten.

Zeitlimits festlegen

Legen Sie ein angemessenes Zeitlimit fest, nach dem die Standortaktualisierungen beendet werden sollen, um den Akku zu schonen. Die Zeitüberschreitung sorgt dafür, dass Updates nicht unbegrenzt fortgesetzt werden, und schützt die App in Szenarien, in denen Updates angefordert, aber nicht entfernt werden (z. B. aufgrund eines Fehlers im Code).

Fügen Sie für eine Anfrage an einen zusammengeführten Standortanbieter ein Zeitlimit hinzu, indem Sie setExpirationDuration() aufrufen. Diese Methode erhält einen Parameter, der die Zeit in Millisekunden seit dem letzten Aufruf der Methode angibt. Sie können auch ein Zeitlimit hinzufügen, indem Sie setExpirationTime() aufrufen. Dieser erhält einen Parameter, der die Ablaufzeit in Millisekunden seit dem letzten Start des Systems darstellt.

Wenn Sie einer Geofence-Standortanfrage ein Zeitlimit hinzufügen möchten, rufen Sie die Methode setExpirationDuration() auf.

Batchanfragen

Stellen Sie für alle Anwendungsfälle, die nicht im Vordergrund ausgeführt werden, mehrere Anfragen gleichzeitig als Batch bereit. Verwenden Sie die Methode setInterval(), um das Intervall anzugeben, in dem der Standort berechnet werden soll. Legen Sie dann mit der Methode setMaxWaitTime() das Intervall fest, in dem der Standort an Ihre App gesendet wird. Übergeben Sie der Methode setMaxWaitTime() einen Wert, der ein Vielfaches des an die Methode setInterval() übergebenen Werts ist. Betrachten Sie beispielsweise die folgende 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 berechnet das System den Standort ungefähr alle zehn Minuten und liefert ungefähr alle Stunde etwa sechs Standortdatenpunkte in einem Batch. Sie erhalten zwar weiterhin alle zehn Minuten Standortaktualisierungen, sparen aber Akku, da Ihr Gerät nur etwa alle Stunde aktiviert wird.

Passive Standortaktualisierungen verwenden

Bei Anwendungsfällen im Hintergrund sollten Sie die Standortaktualisierungen begrenzen. Die Einschränkungen von Android 8.0 (API-Level 26) zwingen dazu, diese Praxis einzuhalten. Bei Apps, die auf älteren Geräten ausgeführt werden, sollte der Standortzugriff im Hintergrund jedoch so weit wie möglich eingeschränkt werden.

Es ist wahrscheinlich, dass eine andere App, während Ihre App im Hintergrund ausgeführt wird, häufig Standortaktualisierungen im Vordergrund anfordert. Über die Standortdienste werden diese Aktualisierungen für Ihre App verfügbar gemacht. Betrachten Sie die folgende Standortanfrage, bei der Standortdaten opportunistisch verwendet werden:

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 der App ungefähr alle 15 Minuten berechnet. Wenn andere Apps den Standort anfordern, erhält die App die Daten im maximalen Intervall von zwei Minuten.

Der passive Verbrauch von Standortdaten führt zwar nicht zu einem Akkuverbrauch, Sie sollten jedoch besonders vorsichtig sein, wenn der Empfang von Standortdaten teure CPU- oder E/A-Vorgänge auslöst. Um die Akkukosten zu minimieren, sollte das in setFastestInterval() angegebene Intervall nicht zu kurz sein.