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.