Konum hizmetlerini kullanırken uygulamanızın cihazın pil ömrü üzerindeki etkisini iyileştirmek için aşağıdaki işlemleri yapın.
Konum güncellemelerini kaldırma
Gereksiz pilin hızlı tükenmesinin yaygın bir nedeni, konum güncellemelerinin artık gerekli olmadığı durumlarda kaldırılmamasıdır.
Bu durum, bir etkinliğin onStart() veya onResume() yaşam döngüsü yöntemleri, onPause() ya da onStop() yaşam döngüsü yöntemlerinde removeLocationUpdates() için karşılık gelen bir çağrı olmadan requestlocationUpdates() çağrısı içerdiğinde meydana gelebilir.
Uygulamanızdaki etkinliklerin yaşam döngüsünü daha iyi yönetmek için yaşam döngüsüne duyarlı bileşenleri kullanabilirsiniz. Daha fazla bilgi için Yaşam Döngüsüne Duyarlı Bileşenlerle Yaşam Döngülerini İşleme başlıklı makaleyi inceleyin.
Zaman aşımını ayarlama
Pilin hızlı tükenmesini önlemek için konum güncellemelerinin ne zaman durdurulacağını belirten makul bir zaman aşımı ayarlayın. Zaman aşımı, güncellemelerin süresiz olarak devam etmemesini sağlar ve güncellemelerin istendiği ancak kaldırılmadığı (ör. koddaki bir hata nedeniyle) senaryolarda uygulamayı korur.
Çok kaynaklı konum sağlayıcı isteği için setDurationMillis() çağrısı yaparak zaman aşımı ekleyin. Bu çağrı, yöntemin son çağrılmasından bu yana geçen süreyi milisaniye cinsinden temsil eden bir parametre alır. Ayrıca, geçerlilik süresini süre olarak ifade etmek için bu yöntemi kullanabilirsiniz.
Bir coğrafi sınırlı alan konum isteğine zaman aşımı eklemek için setExpirationDuration() yöntemini çağırın.
Toplu istekler
Ön planda olmayan tüm kullanım alanlarında birden fazla isteği birlikte gruplandırın. Konumun hesaplanmasını istediğiniz aralığı belirtmek için
setIntervalMillis() yöntemini kullanın. Ardından, konumun uygulamanıza sağlandığı aralığı ayarlamak için setMaxUpdateDelayMillis() yöntemini kullanın. setMaxUpdateDelayMillis() yöntemine, setIntervalMillis() yöntemine aktarılan değerin katı olan bir değer aktarın. Örneğin, aşağıdaki konum isteğini ele alalım:
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();
Bu durumda sistem, konumu yaklaşık on dakikada bir hesaplar ve yaklaşık olarak saatte bir, yaklaşık altı konum veri noktası içeren bir toplu iş sunar. Konum güncellemelerini yaklaşık on dakikada bir almaya devam ederken cihazınız yalnızca 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 düşük cihazlarda çalışan uygulamalar, arka plan konumunu mümkün olduğunca sınırlamaya çalışmalıdır.
Uygulamanız arka plandayken başka bir uygulama ön planda sık sık konum güncellemeleri istiyor olabilir. Konum hizmetleri, bu güncellemeleri uygulamanızda kullanılabilir hâle getirir. Konum verilerini fırsatçı bir şekilde tüketen aşağıdaki konum isteğini göz önünde bulundurun:
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();
Önceki örnekte, uygulamanın konumu yaklaşık 15 dakikada bir hesaplanıyor. Diğer uygulamalar konum isteğinde bulunursa uygulama, verileri en fazla iki dakikalık aralıklarla alır.
Konumun pasif olarak kullanılması pilin hızlı tükenmesine neden olmasa da konum verilerinin alınması pahalı CPU veya G/Ç işlemlerini tetiklediğinde daha dikkatli olun. Pil maliyetlerini en aza indirmek için setMinUpdateIntervalMillis() içinde belirtilen aralık çok küçük olmamalıdır.