Pil için konumu optimize etme

Arka Planda Konum Sınırlar Android 8.0 (API seviyesi 26), konum hizmetlerinin kullanımı pilin çabuk bitmesini etkiler. Bu sayfada bazı konumlar ele alınıyor hizmet ile ilgili en iyi uygulamalar ve uygulamalarınızın pil gücünü artırmak için şu anda neler yapabileceğinizi öğrenin yardımcı olur. Bu en iyi uygulamaların izlenmesi, çalıştığı platform sürümü olabilir.

Android 8.0'daki arka planda konum sınırları aşağıdaki değişiklikleri beraberinde getirdi:

  • Arka planda konum toplama kısıtlanır, konum hesaplanır ve yalnızca saatte birkaç kez teslim edilir.
  • Kablosuz ağ taramaları daha koruyucudur ve konum güncellemeleri cihaz aynı statik erişim noktasına bağlı kalır.
  • Coğrafi sınır çizme yanıt hızı, onlarca saniyeden yaklaşık iki saniyeye değişir dakika. Bu değişiklik, pil performansını belirgin şekilde artırdı (10 kata kadar) bazı cihazlarda daha iyi hale getiriyor.

Bu sayfada Google Konum Hizmetleri'ni API'leri kullanabilirsiniz. çerçeve konumuna göre daha hafif bir pil yükü API'ler. İçinde Bu sayfanın her biri için çoklu konum sağlayıcısı hakkında bilgi sahibi API GPS, kablosuz ve hücresel ağlardan gelen sinyallerin yanı sıra ivme ölçer, jiroskop, manyetometre ve diğer sensörler. Ayrıca coğrafi sınır API'nin sunduğu üzerine yerleştirilmiş olup pil için optimize edilmiştir bazı yolları da görmüştük.

Pilin hızlı tükenmesi durumunu anlama

Konum toplama ve pilin çabuk bitmesi aşağıdakilerden hangisiyle doğrudan ilişkilidir? için şu özellikleri taşıdığını unutmayın:

  • Doğruluk: Konum verilerinin kesinliği. Genel olarak, dönüşüm değeri ne kadar doğruluğunu artırırsanız pil tüketimi de o kadar artar.
  • Sıklık: Konumun hesaplanma sıklığı. Konum ne kadar sık daha fazla pil kullanılır.
  • Gecikme: Konum verilerinin ne kadar hızlı yayınlandığı. Daha az gecikme genellikle daha fazla pil.

Doğruluk

Konum doğruluğunu setPriority() yöntemini kullanarak aşağıdaki değerlerden birini bağımsız değişken olarak iletin:

  • PRIORITY_HIGH_ACCURACY mümkün olan en doğru konumu sağlar ve bu konum GPS, Wi-Fi ve hücreseli etkinleştirir ve çeşitli Sensörler); pil tüketimine neden olabilir.
  • PRIORITY_BALANCED_POWER_ACCURACY güç için optimize ederken doğru konum sağlar. Çok nadiren kullanıyor GPS'e dokunun. Genelde hesaplama yapmak için kablosuz ağ ve hücre bilgilerinin bir kombinasyonunu kullanır cihaz konumu.
  • PRIORITY_LOW_POWER Çoğunlukla baz istasyonlarına ihtiyaç duyar ve GPS ve kablosuz bağlantı girişlerinden kaçınır. minimum pil tüketimiyle genel (şehir düzeyinde) doğruluk.
  • PRIORITY_NO_POWER Diğer uygulamalardan konum bilgisini pasif olarak alır. zaten hesaplanmıştır.

Çoğu uygulamanın konum ihtiyacı, dengeli güç veya düşük güç kullanılarak karşılanabilir güç seçenekleri. Yüksek doğruluk, gerçek zamanlı konum güncellemeleri (ör. uygulamasında).

Frekans

Konum sıklığını iki yöntem kullanarak belirtebilirsiniz:

  • Şunu kullanın: setinterval() uygulamanız için konumun hesaplandığı aralığı belirtme yöntemi olarak kullanın.
  • Şunu kullanın: setFastestInterval() konumun diğer uygulamalar için hesaplandığı aralığı uygulamanıza teslim edilir.

setInterval() kullanırken mümkün olan en büyük değeri iletmeniz gerekir. Bu özellikle de arka planda konum toplama için geçerlidir. pilin hızlı tükenmesi anlamına gelebilir. Birkaç saniyelik aralıklar, kullanım alanları. Android 8.0'da kullanıma sunulan arka plan konum sınırları ancak uygulamanız, bu stratejileri Android'de zorunlu kılmaya çalışmalıdır. 7.0 veya daha eski cihazlar.

Yanıt gecikti

Gecikmeyi şunları kullanarak belirtebilirsiniz: setMaxWaitTime() yönteminde genellikle aralıktan birkaç kat daha büyük bir değer setInterval() yöntemidir. Bu ayar, konumun teslimini geciktirir ve birden fazla konum güncellemesi gruplar halinde teslim edilir. Bu iki değişiklik pil tüketimini en aza indirmeye yardımcı olur.

Uygulamanızın hemen konum güncellemesine ihtiyacı yoksa setMaxWaitTime() yöntemine mümkün olan en büyük değer ile Daha fazla veri ve pil verimliliği için gecikme

Coğrafi sınırlar kullanırken, uygulamalar setNotificationResponsiveness() yöntem olarak kullanabilirsiniz. Beş dakika veya daha uzun bir değer önerilir.

Konum kullanım alanları

Bu bölümde bazı tipik konum toplama senaryoları, coğrafi sınır çizme ve çok kaynaklı konum sağlayıcısının optimum kullanımı için öneriler API'ler.

Kullanıcı tarafından görülebilen veya ön plan güncellemeleri

Örnek: Sık sık ve doğru güncellemelere ihtiyaç duyan ve çok düşük sıklıkta Tüm güncellemeler ön planda gerçekleşir: Kullanıcı bir etkinlik başlatır, Konum verilerini tüketir ve kısa bir süre sonra etkinliği durdurur.

Şunu kullanın: setPriority() yöntemi, PRIORITY_HIGH_ACCURACY veya PRIORITY_BALANCED_POWER_ACCURACY.

Raporda belirtilen aralık setInterval() yöntem kullanım örneğine göre değişir. Gerçek zamanlı senaryolarda değeri daha az olarak belirleyin. saniye; Birkaç dakika (yaklaşık iki dakika veya daha yüksek olması önerilir).

Cihazın konumunu bilme

Örnek: Bir hava durumu uygulaması, cihazın konumunu bilmek istiyor.

Şunu kullanın: getLastLocation() en son kullanılabilir konumu döndüren bir yöntem vardır (nadiren de destek kayıtları boş olabilir) . Bu yöntem, konum bilgilerini almak ve ve konum güncellemelerinin etkin bir şekilde istenmesiyle ilişkili maliyetler tahakkuk etmez. Tekliflerinizi otomatikleştirmek ve optimize etmek için birlikte isLocationAvailable() yöntemidir ve bu değer, true getLastLocation() emin olmanız gerekir.

Kullanıcı belirli bir konumda olduğunda güncelleme başlatma

Örnek: Kullanıcı konuma belirli bir mesafede olduğunda güncelleme isteme iş, ev veya başka bir konum olabilir.

Kaynaşık ile birlikte coğrafi sınır belirleme kullanın konum sağlayıcı güncellemeleri. Uygulama coğrafi sınır aldığında güncelleme iste giriş tetikleyicisi ve uygulama coğrafi sınır çıkışı aldığında güncellemeleri kaldırır tetikleyici olur. Bu şekilde, uygulama yalnızca aşağıdaki durumlarda daha ayrıntılı konum güncellemeleri alır: Kullanıcı tanımlı bir alana girdi.

Bu senaryodaki tipik iş akışı, bir bildirim göstermeyi içerebilir. coğrafi sınırdan sonra geçişe ve kullanıcı bildirime dokunduğunda güncelleme isteyecek kod.

Kullanıcının etkinlik durumuna göre güncelleme başlatma

Örnek: Yalnızca kullanıcı araç kullanırken ya da araç kullanırken güncelleme isteme bisiklete biniyor.

Etkinlik Tanıma API birlikte çok yönlü bir çözüm sunar. Şu durumlarda güncelleme iste: Hedeflenen etkinlik algılanır ve kullanıcı çalışmayı durdurduğunda güncellemeleri kaldırır pek çok yolu vardır.

Bu kullanım alanı için tipik iş akışı, bir bildirimine ve bir etkinlik başlatarak kullanıcı bildirime dokunduğunda güncelleme isteyecek kod içerir.

Coğrafi alanlara bağlı arka planda konum güncellemelerinin uzun süredir devam etmesi

Örnek: Kullanıcı, cihaz yakında olduğunda bildirim almak istiyor olabilir.

Bu, coğrafi sınır çizme için harika bir kullanım alanıdır. Çünkü kullanım alanı arka planda konumu içeriyorsa, addGeofences(GeofencingRequest, PendingIntent) yöntemidir.

Aşağıdaki yapılandırma seçeneklerini ayarlamanız gerekir:

  • Bekleme geçişlerini izliyorsanız setLoiteringDelay() yaklaşık beş dakika veya daha kısa bir değer ileten bir yöntem vardır.

  • Şunu kullanın: setNotificationResponsiveness() yaklaşık beş dakikalık bir zamandır. Ancak, veya bu süredeki ek gecikmeyi yönetmeniz durumunda, daha yüksek olacaktır.

Bir uygulama aynı anda en fazla 100 coğrafi sınır kaydedebilir. Kullanılıyor Bu örnekte bir uygulama çok sayıda perakendeci seçeneğini izlemek istiyorsa, şehir düzeyinde) ve şehir düzeyinde geniş coğrafi sınırlar şehir içindeki yerler için) daha küçük coğrafi mevkiler ne kadar büyük olduğunu göreceksiniz. Kullanıcı büyük bir coğrafi sınıra girdiğinde, daha küçük coğrafi sınırlar eklenmelidir; Kullanıcı daha büyük coğrafi sınırdan çıktığında daha küçük coğrafi sınırlar coğrafi sınırlar kaldırılabilir ve coğrafi sınırlar yeni bir bölge için yeniden kaydedilebilir.

Görünür bir uygulama bileşeni olmadan uzun süre çalışan arka planda konum güncellemeleri

Örnek: Konumu pasif olarak izleyen bir uygulama

Şunu kullanın: setPriority() yöntemini içeren PRIORITY_NO_POWER Bu seçenek, pil tüketimini neredeyse hiç gerektirmediği için mümkünse daha az seçenek sunar. Şunu kullanıyorsanız: PRIORITY_NO_POWER mümkün değil, şunu kullanın: PRIORITY_BALANCED_POWER_ACCURACY veya PRIORITY_LOW_POWER, ama her tür içeriği PRIORITY_HIGH_ACCURACY Bu seçenek önemli ölçüde tüketir. pil.

Daha fazla konum verisine ihtiyacınız varsa setFastestInterval() veya daha düşük bir değer ileten bir yöntem setInterval(). Şunlarla birleştirildiğinde: PRIORITY_NO_POWER seçeneğini belirlerseniz, pasif konum, kullanıcılar tarafından hesaplanan konum verilerini diğer uygulamaları ek ücret ödemeden kullanabilirsiniz.

Biraz gecikme ekleyerek ve setMaxWaitTime() yöntemidir. Örneğin, setinterval() yöntemini yaklaşık 10 dakika sürecekse şu numarayla setMaxWaitTime() numaralı telefonu aramayı düşünebilirsiniz: 30 ile 60 dakika arasında bir değere ayarladık. Bu seçenekler kullanılarak konum, uygulamanız için yaklaşık 10 dakikada bir, ancak uygulama yalnızca uyanıkken her 30-60 dakikada bir güncellenir ve toplu güncelleme olarak bazı konum verileri kullanılabilir. Bu Daha fazla veri ve daha iyi pil için takas gecikmesi yaklaşımı bazı yolları da görmüştük.

Kullanıcı diğer uygulamalarla etkileşimde bulunurken sık sık yüksek doğruluklu güncellemeler yapılır

Örnek: kullanıcı aşağıdaki işlemleri yaptığında çalışmaya devam eden bir navigasyon veya fitness uygulaması. ekranı kapatır veya farklı bir uygulama açar.

Bir ön plan hizmeti kullanın. Pahalı işler yapılacaksa uygulamanız tarafından kullanıcı adına yapılması, kullanıcıyı bu çalışmadan önerilen en iyi uygulama. Ön plan hizmeti, bildirimi görürsünüz. Daha fazla bilgi için bkz. Bildirimler Genel Bakış.

Konumla ilgili en iyi uygulamalar

Bu bölümdeki en iyi uygulamaları izleyerek en iyi şekilde yararlanabilirsiniz.

Konum güncellemelerini kaldırma

Pilin bitmesine neden olan yaygın nedenlerden biri de yerin kaldırılmamasıdır gerekli güncellemeleri yapmalarına yardımcı olur. Bu durum, örneğin bir kullanıcı onStart() veya onResume() yaşam döngüsü yöntem, requestlocationUpdates() bir çağrıya karşılık gelen removeLocationUpdates() onPause() veya onStop() yaşam döngüsü yöntemlerinden birini uygulayabilirsiniz.

Sürecin yaşam döngüsünü daha iyi yönetmek için yaşam döngüsüne duyarlı bileşenler izin verir. Daha fazla bilgi için Yaşam Döngüsüne Duyarlı Bileşenler.

Zaman aşımlarını ayarlama

Pilin bitmesine karşı koruma sağlamak için, konum güncellemeleri sırasında makul bir zaman aşımı süresi ayarlayın durması gerekir. Zaman aşımı, güncellemelerin süresiz olarak devam etmemesini sağlar ve Güncellemenin istenen ancak kaldırılmadığı senaryolarda uygulamayı korur. (örneğin, koddaki bir hata nedeniyle).

Çok kaynaklı konum sağlayıcı isteği için şu numarayı arayarak zaman aşımı ekleyin: setExpirationDuration() Bu değer, yöntemi en son çağrıldı. Ayrıca, şu numarayı arayarak da zaman aşımı ekleyebilirsiniz: setExpirationTime() Süre sonunu milisaniye cinsinden temsil eden bir parametre alır. sistem son açılışından beri.

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

Toplu istekler

Ön plan dışı tüm kullanım durumları için birden fazla isteği birlikte gruplandırın. Tekliflerinizi otomatikleştirmek ve optimize etmek için "the" setInterval() yöntemini kullanın. Daha sonra, setMaxWaitTime() yöntemini kullanın. İlgili içeriği oluşturmak için kullanılan setMaxWaitTime() yöntemine iletilen değer, değerin katı olmalıdır setInterval() yöntemine geçirildi. Örneğin, şunları göz önünde bulundurun: konum isteği:

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 örnekte, konum yaklaşık her on dakikada bir hesaplanır ve yaklaşık olarak Yaklaşık saatte bir altı konum veri noktası toplu olarak iletiliyor. Yaklaşık on dakikada bir konum güncellemeleri almaya devam etseniz de çünkü cihazınız yalnızca saatte bir uyanık olduğu için pil daha yüksektir.

Pasif konum güncellemelerini kullanma

Arka planda kullanım durumlarında konum güncellemelerini kısıtlamak iyi bir fikirdir. Android 8.0 sınırlamaları bu uygulamayı zorunlu kılar ancak eski cihazlarda çalışan uygulamalar arka planda konumu mümkün olduğunca sınırlamaya çalışın.

Başka bir uygulama arka planda çalışırken muhtemelen Sıklıkla ön planda konum güncellemesi isteyen kullanıcılar. Konum hizmetleri bu güncellemeleri uygulamanızda kullanılabilir hale getirir. Şu konumu göz önünde bulundurun: isteğini yerine getirir:

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

Yukarıdaki örnekte, uygulamanız için konum yaklaşık her 15 günde bir hesaplanmaktadır dakika. Diğer uygulamalar konum bilgisi isterse veriler uygulamanız tarafından kullanılabilir hale gelir en fazla iki dakikalık aralıklarla.

Konumun pasif olarak tüketilmesi pili tüketmez ancak aşağıdaki durumlarda ekstra dikkatli olun konum verilerinin alınmasının pahalı CPU veya G/Ç işlemlerini tetiklediği durumlar anlamına gelir. Pil maliyetlerini en aza indirmek için setFastestInterval() çok küçük olmamalıdır.

Kullanıcılarınızın pil performansını önemli ölçüde artırabilirsiniz. cihazları bu sayfadaki önerileri uygulayın. Kullanıcılarınızın silme olasılığı daha düşüktür veya pilini harcamayan uygulamalar.