Standortnutzung für Akkulaufzeit optimieren

Ergreifen Sie die folgenden Maßnahmen, um die Auswirkungen Ihrer App auf die Akkulaufzeit eines Geräts zu verringern, wenn Sie Standortdienste verwenden.

Standortaktualisierungen entfernen

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

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

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

Zeitlimits festlegen

Um eine schnelle Akkuentladung zu vermeiden, sollten Sie ein angemessenes Zeitlimit festlegen, nach dem Standortaktualisierungen beendet werden. Das Zeitlimit 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 des Anbieters für kombinierte Standortbestimmung ein Zeitlimit hinzu, indem Sie setDurationMillis() aufrufen. Diese Methode erhält einen Parameter, der die Zeit in Millisekunden seit dem letzten Aufruf der Methode darstellt. Sie können die Ablaufzeit auch als Dauer angeben.

Rufen Sie die Methode setExpirationDuration() auf, um einer Anfrage für einen Geofence-Standort ein Zeitlimit hinzuzufügen.

Batchanfragen

Bei allen Anwendungsfällen, die nicht im Vordergrund ausgeführt werden, sollten mehrere Anfragen zusammengefasst werden. Mit der Methode setIntervalMillis() können Sie das Intervall angeben, in dem der Standort berechnet werden soll. Verwenden Sie dann die Methode setMaxUpdateDelayMillis(), um das Intervall festzulegen, in dem der Standort an Ihre App übermittelt wird. Übergeben Sie einen Wert an die Methode setMaxUpdateDelayMillis(), der ein Vielfaches des an die Methode setIntervalMillis() übergebenen Werts ist. Betrachten Sie beispielsweise die folgende Standortanfrage:

Kotlin

val request = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10 * 60 * 1000)
.setMaxUpdateDelayMillis(60 * 60 * 1000)
.build()

Java

LocationRequest request = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10 * 60 * 1000)
    .setMaxUpdateDelayMillis(60 * 60 * 1000)
    .build();

In diesem Fall berechnet das System den Standort etwa alle zehn Minuten und liefert etwa stündlich einen Batch mit sechs Standortdatenpunkten. Sie erhalten weiterhin etwa alle zehn Minuten Standortaktualisierungen, sparen aber Akku, da Ihr Gerät nur etwa jede Stunde aktiviert wird.

Passive Standortaktualisierungen verwenden

Bei Anwendungsfällen im Hintergrund ist es ratsam, Standortaktualisierungen zu drosseln. Unter Android 8.0 (API-Level 26) wird diese Vorgehensweise erzwungen. Apps, die auf älteren Geräten ausgeführt werden, sollten jedoch versuchen, die Nutzung von Standortermittlung im Hintergrund so weit wie möglich einzuschränken.

Wahrscheinlich fordert eine andere App häufig Standortaktualisierungen im Vordergrund an, während Ihre App im Hintergrund ausgeführt wird. Standortdienste stellen diese Updates für Ihre App zur Verfügung. Sehen Sie sich die folgende Standortanfrage an, bei der Standortdaten opportunistisch genutzt werden:

Kotlin

val request = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 15 * 60 * 1000)
.setMinUpdateIntervalMillis(2 * 60 * 1000)
.build()

Java

LocationRequest request = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 15 * 60 * 1000)
    .setMinUpdateIntervalMillis(2 * 60 * 1000)
    .build();

Im vorherigen Beispiel wird der Standort der App etwa alle 15 Minuten berechnet. Wenn andere Apps den Standort anfordern, erhält die App die Daten in einem maximalen Intervall von zwei Minuten.

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