Android vitals uyanık kalma kilidi metriğini kullanarak uygulamanızın pil kullanımını optimize etme
Okuma süresi: 7 dk.
Pil ömrü, kullanıcı deneyiminin çok önemli bir parçasıdır ve uyanık kalma kilitleri bu konuda önemli bir rol oynar. Bunları aşırı kullanıyor musunuz? Bu blog yayınında uyanık kalma kilitlerinin ne olduğunu, bunları kullanmayla ilgili en iyi uygulamalardan bazılarını ve Play Console metriğiyle uygulamanızın davranışını nasıl daha iyi anlayabileceğinizi inceleyeceğiz.
Android vitals'da aşırı sayıda kısmi uyanık kalma kilidi kullanımı
Google Play Console artık temel performans göstergesi olarak aşırı sayıda kısmi uyanık kalma kilidi kullanımına odaklanarak pilin hızlı tükenmesini izliyor.
Bu özellik, mevcut temel metrik kararlılık göstergelerinin (kullanıcı tarafından algılanan aşırı kilitlenmeler ve ANR'ler) yanı sıra pil verimliliğinin önemini de artırır. Aşırı uyanık kalma kilitleri için kötü davranış eşiği belirledik. 1 Mart 2026'dan itibaren, uygulamanız veya oyununuz bu kalite eşiğini karşılamazsa öneriler gibi öne çıkan keşif yüzeylerinden hariç tutulabilir. Bazı durumlarda, uygulamanızın aşırı pil tüketimine neden olabileceğini kullanıcılara bildirmek için mağaza girişinizde bir uyarı gösterebiliriz.
Android vitals'a genel bakış sayfasındaki aşırı uyanık kalma kilidi uyarısı.
Mobil cihazlarda Android vitals metriği, ekran kapalıyken ve uygulama arka plandayken veya ön plan hizmeti çalıştırırken alınan muaf olmayan uyanık kalma kilitleri için geçerlidir. Android vitals, aşağıdaki durumlarda kısmi uyanık kalma kilidi kullanımını aşırı olarak değerlendirir:
- Uyanık kalma kilitleri 24 saatlik bir süre içinde en az iki saat boyunca tutulur.
- Uygulamanızın oturumlarının% 5'inden fazlasını etkiliyor (28 günlük ortalama).
Ses, konum ve JobScheduler kullanıcı tarafından başlatılan API'ler tarafından oluşturulan uyanık kalma kilitleri, uyanık kalma kilidi hesaplamasından muaf tutulur.
Uyanık kalma kilitlerini anlama
Uyanık kalma kilidi, kullanıcı cihazla aktif olarak etkileşimde bulunmadığında bile uygulamanın cihazın CPU'sunu çalışır durumda tutmasına olanak tanıyan bir mekanizmadır.
Kısmi uyanık kalma kilidi, ekran kapalı olsa bile CPU'nun çalışmaya devam etmesini sağlayarak CPU'nun düşük güçte "askıya alma" durumuna girmesini önler. Tam uyanık kalma kilidi, hem ekranı hem de CPU'yu çalışır durumda tutar.
Kısmi uyanık kalma kilitleri iki yöntemle alınır:
- Uygulama, belirli bir kullanım alanı için PowerManager API'lerini kullanarak uyanık kalma kilidini manuel olarak alır ve serbest bırakır. Bu genellikle kullanıcı tarafından algılanabilen işlemler için tasarlanmış bir platform yaşam döngüsü API'si olan ön plan hizmeti ile birlikte alınır.
- Alternatif olarak, uyanık kalma kilidi başka bir API tarafından alınır ve API'nin kullanımı nedeniyle uygulamayla ilişkilendirilir. Bu konuda daha fazla bilgiyi en iyi uygulamalar bölümünde bulabilirsiniz.
Uyanık kalma kilitleri, kullanıcı tarafından başlatılan büyük bir dosyanın indirilmesi gibi görevleri tamamlamak için gerekli olsa da aşırı veya yanlış kullanımı pilin önemli ölçüde tükenmesine neden olabilir. Uygulamaların uyanık kalma kilitlerini saatlerce tuttuğu veya düzgün bir şekilde serbest bırakmadığı durumlar gördük. Bu durum, kullanıcıların uygulamayla etkileşimde bulunmadıkları zamanlarda bile pilin önemli ölçüde tükenmesiyle ilgili şikayetlere yol açıyor.
Uyanık Kalma Kilidi Kullanımıyla İlgili En İyi Uygulamalar
Aşırı uyanık kalma kilidi kullanımında hata ayıklama işleminin nasıl yapılacağını incelemeden önce uyanık kalma kilidiyle ilgili en iyi uygulamaları takip ettiğinizden emin olun.
Şu dört kritik soruyu göz önünde bulundurun.
1. Alternatif uyanık kalma kilidi seçeneklerini değerlendirdiniz mi?
Manuel kısmi uyanık kalma kilidi edinmeyi düşünmeden önce aşağıdaki karar verme akış şemasını uygulayın:
Uyanık kalma kilidinin manuel olarak ne zaman alınacağına karar vermek için akış şeması
- Ekranın açık kalması gerekiyor mu?
- Evet: Bunun yerine Ekranı Açık Tut dokümanlarına bakın.
- Uygulama, ön plan hizmeti çalıştırıyor mu?
- Hayır: Manuel olarak uyanık kalma kilidi edinmeniz gerekmez.
- Cihazın askıya alınması kullanıcı deneyimini olumsuz etkiler mi?
- Hayır: Örneğin, cihaz uyandıktan sonra bir bildirimi güncellemek için uyanık kalma kilidi gerekmez.
- Evet: Cihazın askıya alınmasını önlemek kritik önem taşıyorsa (ör. harici bir cihazla devam eden iletişim) devam edin.
- Cihazı sizin adınıza uyanık tutan bir API zaten var mı?
- LocationManager gibi diğer API'ler tarafından uyanık kalma kilitlerinin oluşturulduğu senaryoları belirlemek için Diğer API'ler tarafından oluşturulan uyanık kalma kilitlerini belirleme başlıklı dokümanlardan yararlanabilirsiniz.
- API yoksa son soruya geçin.
- Tüm bu soruları yanıtladıysanız ve alternatif bir çözüm bulamadıysanız manuel olarak uyanık kalma kilidi alma işlemine devam etmeniz gerekir.
2. Uyanık kalma kilidini doğru şekilde adlandırıyor musunuz?
Uyanık kalma kilitlerini manuel olarak alırken hata ayıklama için doğru adlandırma önemlidir:
- Adlarda e-posta adresi gibi kişisel veri (PII) kullanmayın. Kimliği tanımlayabilecek bilgiler algılanırsa uyanık kalma kilidi
_UNKNOWNolarak günlüğe kaydedilir ve hata ayıklama engellenir. - Uyanık kalma kilidinizi sınıf veya yöntem adlarını kullanarak programlı bir şekilde adlandırmayın. Bu adlar, Proguard gibi araçlar tarafından gizlenebilir. Bunun yerine sabit kodlu bir dize kullanın.
- Uyanık kalma kilidi etiketlerine sayaç veya benzersiz tanımlayıcı eklemeyin. Sistemin, kullanımı ada göre birleştirmesine olanak tanımak ve anormal davranışların tespitini kolaylaştırmak için uyanık kalma kilidi her çalıştığında aynı etiket kullanılmalıdır.
3. Alınan uyanık kalma kilidi her zaman serbest bırakılıyor mu?
Uyanık kalma kilidini manuel olarak alıyorsanız uyanık kalma kilidinin her zaman serbest bırakıldığından emin olun. Uyanık kalma kilidinin serbest bırakılmaması, pilin önemli ölçüde tükenmesine neden olabilir.
Örneğin, processingWork() sırasında yakalanmayan bir istisna oluşursa release() çağrısı hiçbir zaman gerçekleşmeyebilir. Bunun yerine, bir istisna oluşsa bile uyanık kalma kilidinin serbest bırakılmasını sağlamak için try-finally bloğu kullanabilirsiniz.
Ayrıca, uyanık kalma kilidine bir zaman aşımı ekleyerek belirli bir süre sonra serbest bırakılmasını sağlayabilir ve süresiz olarak tutulmasını önleyebilirsiniz.
fun processingWork() {
wakeLock.apply {
try {
acquire(60 * 10 * 1000) // timeout after 10 minutes
doTheWork()
} finally {
release()
}
}
}4. Uyandırma sıklığını azaltabilir misiniz?
Periyodik veri istekleri için uygulamanızın cihazı uyandırma sıklığını azaltmak, pil optimizasyonu açısından çok önemlidir. Uyandırma sıklığını azaltmaya yönelik bazı örnekler şunlardır:
- WorkManager: PeriodicWorkRequest'lerdeki periyodik aralığı artırın.
- SensorManager: İşleyiciyi kaydederken maxReportLatencyMs değerini belirterek toplu işleme özelliğinden yararlanın.
- Çok Kaynaklı Konum Sağlayıcı:
- En son önbelleğe alınan konum için getLastLocation yöntemini kullanarak konum alma sıklığını azaltın.
- Daha az pil tüketen bir güncelleme yöntemi için setPriority(PRIORITY_PASSIVE) kullanın.
- Ayrıca, setMinUpdateIntervalMillis ile minimum güncelleme aralığı ayarlayarak konum gruplama mekanizmasından yararlanabilirsiniz.
Daha fazla bilgiyi uyanık kalma kilidiyle ilgili en iyi uygulamalar dokümanında bulabilirsiniz.
Aşırı uyanık kalma kilidi kullanımında hata ayıklama
En iyi niyetlerle bile aşırı uyanık kalma kilidi kullanımı gerçekleşebilir. Uygulamanız Google Play Console'da işaretlenirse hata ayıklama işlemini şu şekilde yapabilirsiniz:
Google Play Console ile ilk kimlik doğrulama
Android vitals'daki aşırı kısmi uyanık kalma kilidi kontrol panelinde, uygulamanızla ilişkili muaf olmayan uyanık kalma kilidi adlarının dökümü, etkilenen oturumlar ve süreler gösterilir. Uyanık kalma kilidi adının uygulama tarafından mı yoksa başka bir API tarafından mı tutulduğunu belirlemenize yardımcı olması için belgeleri kullanmayı unutmayın.
Aşırı sayıda uyanık kalma kilidi etiketlerini görüntülemek için Android vitals aşırı sayıda kısmi uyanık kalma kilidi kontrol panelinde dökümler bölümüne gidildi.
Çalışanlar/işler tarafından tutulan aşırı uyanık kalma kilitlerinde hata ayıklama
Çalışan tarafından tutulan uyanık kalma kilitlerini şu uyanık kalma kilidi adıyla tanımlayabilirsiniz:
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Çalışan tarafından tutulan uyanık kalma kilidi adlarının tüm varyasyonlarının listesini belgelerde bulabilirsiniz. Bu uyanık kalma kilitlerinde hata ayıklamak için Background Task Inspector'ı kullanarak yerel olarak hata ayıklayabilir veya getStopReason'dan yararlanarak sahada hata ayıklayabilirsiniz.
Android Studio Background Task Inspector
Sık sık yeniden deneme yapan ve başarısız olan "WeatherSyncWorker" adlı bir işçiyi tanımlayabilen Background Task Inspector'ın ekran görüntüsü.
WorkManager sorunlarını yerel olarak ayıklamak için bu aracı bir emülatörde veya bağlı cihazda (API düzeyi 26 ve üzeri) kullanın. Araç, çalışanların ve durumlarının (tamamlandı, yürütülüyor, sıraya alındı) listesini göstererek ayrıntıları incelemenize ve çalışan zincirlerini anlamanıza olanak tanır.
Örneğin, bir çalışanın sistem sınırlamaları nedeniyle sık sık başarısız olup olmadığını veya yeniden deneme yapıp yapmadığını gösterebilir.
Daha fazla bilgi için Background Task Inspector belgelerini inceleyin.
WorkManager getStopReason
Aşırı uyanık kalma kilidi olan çalışanların sahada hata ayıklaması için WorkManager 2.9.0 ve sonraki sürümlerde WorkInfo.getStopReason()'i veya JobScheduler için SDK 31 ve sonraki sürümlerde kullanılabilen JobParameters.getStopReason()'i kullanın.
Bu API, bir çalışanın durma nedenini (ör. STOP_REASON_TIMEOUT, STOP_REASON_QUOTA) günlüğe kaydederek çalışma süresinin dolması nedeniyle sık sık zaman aşımı gibi sorunları tespit etmeye yardımcı olur.
backgroundScope.launch {
WorkManager.getInstance(context)
.getWorkInfoByIdFlow(workRequest.id)
.collect { workInfo ->
logStopReason(workRequest.id, workInfo?.stopReason)
}
}Daha fazla bilgi için Görev planlama API'leri için pil kullanımını optimize etme başlıklı makaleyi inceleyin.
Diğer aşırı uyanık kalma kilidi türlerinde hata ayıklama
Manuel olarak tutulan uyanık kalma kilitlerini veya uyanık kalma kilidini tutan API'leri içeren daha karmaşık senaryolarda, hata ayıklama için sistem izleme koleksiyonunu kullanmanızı öneririz.
Sistem izleme verilerinin toplanması
Sistem izleme , belirli bir süre boyunca sistem etkinliğinin ayrıntılı kaydını yakalayan güçlü bir hata ayıklama aracıdır. CPU durumu, iş parçacığı etkinliği, ağ etkinliği ve işle ilgili metrikler (ör. iş süresi ve uyanık kalma kilidi kullanımı) hakkında bilgi sağlar.
Sistem izlemeyi birkaç yöntem kullanarak yakalayabilirsiniz:
- Sistem izleme komut satırı aracını kullanma
- Android Studio CPU Profiler'ı kullanma
- Perfetto kullanıcı arayüzünü kullanma
- Cihazda doğrudan geliştirici seçeneklerinden manuel olarak iz kaydetme
Perfetto kullanıcı arayüzünde, Android uygulamaları ve hizmetleri sekmesinde "power:PowerManagement" Atrace kategorisini etkinleştirin.
Seçilen yöntemden bağımsız olarak, cihaz durumu izlerinin görüntülenmesini sağlamak için "power:PowerManagement" Atrace kategorisini topladığınızdan emin olmanız çok önemlidir.
Perfetto kullanıcı arayüzü denetimi ve SQL analizi
Sistem izleri, Perfetto kullanıcı arayüzünde açılıp incelenebilir. İzlemeyi açtığınızda, zaman çizelgesinde çeşitli işlemlerin görselleştirmesini görürsünüz. Bu kılavuzda, "Cihaz Durumu" altındaki kanallara odaklanacağız.
Uzun süreli uyanık kalma kilidi dilimlerini görsel olarak tanımlamak için "Cihaz Durumu" altındaki "En iyi uygulama", "Ekran durumu", "Uzun Uyanık Kalma Kilitleri" ve "İşler" gibi izleri sabitleyin.
Her blokta etkinliğin adı, başlangıç ve bitiş zamanı listelenir. Perfetto'da buna dilim denir.
Birden fazla izin ölçeklenebilir analizi için Perfetto'nun SQL analizini kullanabilirsiniz. Bir SQL sorgusu, süreye göre sıralanmış tüm uyanık kalma kilitlerini bularak aşırı kullanıma en çok katkıda bulunanları belirlemeye yardımcı olabilir.
Sistem izlemede gerçekleşen tüm uyanık kalma kilidi etiketlerini toplayan ve toplam süreye göre sıralayan örnek bir sorguyu aşağıda görebilirsiniz:
SELECT slice.name as name, track.name as track_name,SUM(dur / 100000) as total_dur_ms FROM slice JOIN track ON slice.track_id = track.id WHERE track.name = 'WakeLocks'GROUP BY slice.name, track.name ORDER BY total_dur_ms DESC
Saha içi izleme toplama için ProfilingManager'ı kullanma
Yeniden oluşturulması zor sorunlar için ProfilingManager (SDK 35'e eklendi), geliştiricilerin başlatma ve bitiş tetikleyicileriyle sahada sistem izleri toplamasına olanak tanıyan programatik bir API'dir. Profil toplama için başlangıç ve bitiş tetikleme noktaları üzerinde daha fazla kontrol sunar ve cihaz performansının etkilenmesini önlemek için sistem düzeyinde sıklık sınırlaması uygular.
Sistem izleme verilerini sahada toplama özelliğini nasıl uygulayacağınızla ilgili diğer adımlar için ProfilingManager belgelerine göz atın. Bu belgelerde, programatik olarak izleme yakalama, profil oluşturma verilerini analiz etme ve yerel hata ayıklama komutlarını kullanma hakkında bilgiler yer alır.
ProfilingManager kullanılarak toplanan sistem izleri, manuel olarak toplananlara benzer ancak sistem işlemleri ve diğer uygulama işlemleri izden çıkarılır.
Sonuç
Android vitals'daki aşırı sayıda kısmi uyanık kalma kilidi metriği, geliştiricilerin pil tüketimini azaltmasına ve uygulama kalitesini artırmasına yardımcı olma konusundaki kararlılığımızın yalnızca küçük bir parçasıdır.
Uyanık kalma kilitlerini anlayıp doğru şekilde uygulayarak uygulamanızın pil performansını önemli ölçüde optimize edebilirsiniz. Alternatif API'lerden yararlanmak, uyanık kalma kilidiyle ilgili en iyi uygulamalara uymak ve Background Task Inspector, sistem izleri ve ProfilingManager gibi güçlü hata ayıklama araçlarını kullanmak, uygulamanızın Google Play'de başarılı olmasını sağlamak açısından çok önemlidir.
-
Ürün HaberleriYakında çıkacak Android sürümünü hedefleyen uygulamalar artık WRITE_CONTACTS izniyle kişilere doğrudan yazamayacak.
Roxanna Aliabadi Walker • Okuma süresi: 6 dk. -
Ürün HaberleriTemsilci tabanlı geliştirme hızlandıkça Android mühendisliği heyecan verici yeni bir aşamaya geçiyor: yardımcı kod tamamlamadan, sizin yönlendirmenizle uçtan uca yürütülen temsilcilere geçiş. Kullandığınız modeller ve temsilciler konusunda tam bir seçim özgürlüğüne ve esnekliğe sahipsiniz.
Jason Buchel • Okuma süresi: 3 dk. -
Ürün HaberleriBugün, "bir mağazadan daha fazlası" vizyonumuzu bir sonraki aşamaya nasıl taşıdığımızı paylaştık. Google Play, aylık 250 milyondan fazla etkin kullanıcının kişisel ana sayfası olan Siz sekmesinden 700 milyondan fazla oyuncu profilini birbirine bağlayan birleşik oyun platformumuza kadar her yerde kullanıcılarla buluşuyor.
Paul Feng • Okuma süresi: 3 dk.
Android geliştiriciliğiyle ilgili en son analizleri her hafta gelen kutunuza alın.