Pil ömrü için konum kullanımını optimize etme

Konum hizmetlerini kullanırken uygulamanızın cihazın pil ömrünü etkileme durumunu iyileştirmek için aşağıdaki işlemleri yapın.

Konum güncellemelerini kaldırma

Gereksiz pil tüketiminin yaygın bir nedeni, artık gerekli olmayan konum güncellemelerinin kaldırılmamasıdır.

Bu durum, bir etkinliğin onStart() veya onResume() yaşam döngüsü yöntemlerinde, onPause() veya onStop() yaşam döngüsü yöntemlerinde karşılık gelen bir removeLocationUpdates() çağrısı olmadan requestlocationUpdates() çağrısı bulunduğunda ortaya çıkabilir.

Uygulamanızdaki etkinliklerin yaşam döngüsünü daha iyi yönetmek için yaşam döngüsü bilincine sahip bileşenleri kullanabilirsiniz. Daha fazla bilgi için Yaşam Döngüsü Bilincine Sahip Bileşenlerle Yaşam Döngülerini Yönetme başlıklı makaleyi inceleyin.

Zaman aşımları ayarlama

Pilin tükenmesini önlemek için konum güncellemelerinin durması gereken makul bir zaman aşımı ayarlayın. Zaman aşımı, güncellemelerin süresiz olarak devam etmesini önler ve güncellemelerin istendiği ancak kaldırılmadığı senaryolarda (ör. koddaki bir hata nedeniyle) uygulamayı korur.

Birleştirilmiş konum sağlayıcı isteği için setExpirationDuration()'i çağırarak zaman aşımı ekleyin. Bu yöntem, yöntemin en son çağrılmasından bu yana geçen süreyi milisaniye cinsinden temsil eden bir parametre alır. Ayrıca, sistemin son başlatılmasından itibaren süre sonunu milisaniye cinsinden temsil eden bir parametre alan setExpirationTime() işlevini çağırarak zaman aşımı da ekleyebilirsiniz.

Coğrafi sınır konum isteği için zaman aşımı eklemek üzere setExpirationDuration() yöntemini çağırın.

Toplu istekler

Ön planda olmayan tüm kullanım alanları için birden fazla isteği birlikte gruplandırın. Konumun hesaplanmasını istediğiniz aralığı belirtmek için setInterval() yöntemini kullanın. Ardından, konumun uygulamanıza teslim edildiği aralığı ayarlamak için setMaxWaitTime() yöntemini kullanın. setMaxWaitTime() yöntemine, setInterval() yöntemine iletilen değerin katı olan bir değer gönderin. Örneğin, aşağıdaki konum isteğini ele alalım:

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);

Bu durumda sistem, konumu yaklaşık her on dakikada bir hesaplar ve yaklaşık her saatte bir grup halinde yaklaşık altı konum verisi noktası sağlar. Yaklaşık on dakikada bir konum güncellemesi almaya devam edersiniz ancak cihazınız yalnızca yaklaşık her saatte bir uyandığı için pil tasarrufu yaparsınız.

Pasif konum güncellemelerini kullanma

Arka planda kullanım alanlarında, konum güncellemelerini sınırlamak iyi bir fikirdir. Android 8.0 (API düzeyi 26) sınırları bu uygulamayı zorunlu kılar ancak daha eski cihazlarda çalışan uygulamalar arka planda konum bilgisini mümkün olduğunca kısıtlamaya çalışmalıdır.

Uygulamanız arka plandayken başka bir uygulamanın ön planda sık sık konum güncellemesi istemesi muhtemeldir. Konum hizmetleri, bu güncellemeleri uygulamanıza sunar. Aşağıdaki konum isteğini düşünün. Bu istek, fırsatçı bir şekilde konum verilerini tüketir:

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);

Önceki örnekte, uygulamanın konumu yaklaşık 15 dakikada bir hesaplanır. Diğer uygulamalar konum bilgisi isterse uygulama, verileri en fazla iki dakikalık bir aralıkla alır.

Konum bilgisini pasif olarak kullanmak pil tüketimine neden olmaz ancak konum verilerinin alınmasının pahalı CPU veya G/Ç işlemlerini tetiklediği durumlarda daha dikkatli olun. Pil maliyetlerini en aza indirmek için setFastestInterval() içinde belirtilen aralık çok küçük olmamalıdır.