Ürün Haberleri
Android vitals uyanık kalma kilidi metriğini kullanarak uygulamanızın pil kullanımını optimize etme
Okuma süresi: 7 dakika
Pil ömrü, kullanıcı deneyiminin önemli bir yönüdür ve uyandırma kilitleri bu konuda büyük bir rol oynar. Bu özellikleri aşırı derecede kullanıyor musunuz? Bu blog yayınında, uyandırma kilitlerinin ne olduğunu, bunları kullanmayla ilgili en iyi uygulamaları ve Play Console metriğiyle uygulamanızın davranışını nasıl daha iyi anlayabileceğinizi ele alacağız.
Android Vitals'da aşırı sayıda kısmi uyanık kalma kilidi kullanımı
Play Console artık temel performans göstergesi olarak aşırı sayıda kısmi uyanık kalma kilidi kullanımı üzerinde durarak pilin hızlı tükenmesini izliyor.
Bu özellik, pil verimliliğinin önemini mevcut temel metrik kararlılık göstergeleri (kullanıcı tarafından algılanan aşırı sayıda kilitlenme ve ANR) ile birlikte artırır. Aşırı sayıda uyanık kalma kilidi için kötü davranış eşiği belirledik. 1 Mart 2026'dan itibaren, başlığınız bu kalite eşiğini karşılamıyorsa başlığı öneriler gibi öne çıkan keşif alanlarından hariç tutabiliriz. Bazı durumlarda, uygulamanızın aşırı pilin hızlı tükenmesine neden olabileceğini kullanıcılara bildirmek için mağaza girişinizde bir uyarı gösterebiliriz.
Android vitals'a genel bakış bölümündeki 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 edinilen, muaf olmayan uyanık kalma kilitleri için geçerlidir. Android vitals, kısmi uyanık kalma kilidi kullanımını şu durumlarda aşırı kabul eder:
- Uyanık kalma kilitleri, 24 saatlik bir süre içinde en az iki saat boyunca tutulur.
- 28 günlük ortalamaya göre, uygulamanızın oturumlarının% 5'inden fazlasını etkiliyor.
Ses, konum ve JobScheduler kullanıcı tarafından başlatılan API'ler tarafından oluşturulan uyandırma kilitleri, uyandırma kilidi hesaplamasına dahil edilmez.
Uyanık kalma kilitlerini anlama
Uyanık kalma kilidi, kullanıcının cihazla etkin olarak etkileşimde bulunmadığı durumlarda bile uygulamanın cihazın CPU'sunu çalıştırmaya devam etmesini sağlayan 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üç "askıya alma" durumuna girmesini engeller. Tam uyanık kalma kilidi, hem ekranı hem de CPU'yu çalışır durumda tutar.
Kısmi uyanık kalma kilitleri 2 yöntemle elde edilir:
- 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 kilit 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 uygulamaya atfedilir. Bu konuyla ilgili daha fazla bilgiyi en iyi uygulamalar bölümünde bulabilirsiniz.
Wake lock'lar, kullanıcı tarafından başlatılan büyük bir dosyanın indirilmesi gibi görevler için gerekli olsa da aşırı veya yanlış kullanımı önemli ölçüde pilin hızlı tükenmesine yol açabilir. Uygulamaların saatlerce uyanık kalma kilidi tuttuğu veya bunları düzgün şekilde serbest bırakmadığı, bu nedenle kullanıcıların uygulamayla etkileşimde bulunmadıkları zamanlarda bile önemli ölçüde pilin hızlı tükenmesiyle ilgili şikayetlerde bulunduğu durumlarla karşılaştık.
Uyandırma kilidi kullanımıyla ilgili en iyi uygulamalar
Aşırı uyandırma kilidi kullanımında hata ayıklama yöntemlerine geçmeden önce uyandırma kilidiyle ilgili en iyi uygulamaları takip ettiğinizden emin olun.
Şu dört önemli soruyu göz önünde bulundurun.
1. Başka 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 ne zaman manuel olarak alınacağına karar verme akış çizelgesi
- Ekranın açık kalması gerekiyor mu?
- Evet: Bunun yerine Ekranı Açık Tut dokümanlarına bakın.
- Uygulama, ön plan hizmeti mi çalıştırıyor?
- Hayır: Uyanık kalma kilidini manuel olarak edinmeniz gerekmez.
- Cihazın askıya alınması kullanıcı deneyimine zarar verir mi?
- Hayır: Örneğin, cihaz uyandıktan sonra 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 var mı?
- LocationManager gibi diğer API'ler tarafından oluşturulan uyandırma kilitlerinin oluşturulduğu senaryoları belirlemek için Diğer API'ler tarafından oluşturulan uyandırma kilitlerini belirleme dokümanından yararlanabilirsiniz.
- API yoksa son soruya geçin.
- Tüm bu soruları yanıtladıysanız ve alternatif olmadığını belirlediyseniz uyanık kalma kilidini manuel olarak edinmeye devam etmeniz gerekir.
2. Uyanık kalma kilidini doğru şekilde adlandırıyor musunuz?
Uyandırma kilitleri manuel olarak alınırken hata ayıklama için uygun adlandırma önemlidir:
- Adlarda e-posta adresleri gibi kimliği tanımlayabilecek bilgiler (PII) yer almamalıdır. Kişisel olarak tanımlanabilecek bilgiler algılanırsa uyanık kalma kilidi
_UNKNOWNolarak kaydedilir ve hata ayıklama engellenir. - Proguard gibi araçlar tarafından karartılabileceğinden, sınıf veya yöntem adlarını kullanarak uyandırma kilidinizi programatik olarak adlandırmayın. Bunun yerine sabit kodlanmış bir dize kullanın.
- Uyanık kalma kilidi etiketlerine sayaç veya benzersiz tanımlayıcı eklemeyin. Sistemin kullanımı ada göre toplamasına olanak tanımak için uyanık kalma kilidi her çalıştığında aynı etiket kullanılmalıdır. Bu sayede anormal davranışlar daha kolay tespit edilebilir.
3. Is the acquired wake lock always released?
Uyanık kalma kilidini manuel olarak alıyorsanız uyanık kalma kilidinin serbest bırakılmasının her zaman yürütüldüğünden emin olun. Uyanık kalma kilidinin serbest bırakılmaması, pilin hızlı tükenmesine neden olabilir.
Örneğin, processingWork() sırasında yakalanmamış bir istisna oluşturulursa 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ı garanti etmek için bir try-finally bloğu kullanabilirsiniz.
Ayrıca, belirli bir süre sonra serbest bırakılmasını sağlamak için uyanık kalma kilidine zaman aşımı ekleyebilir ve böylece uyanık kalma kilidinin 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 önemlidir. Uyandırma sıklığını azaltmaya ilişkin bazı örnekler:
- WorkManager: PeriodicWorkRequest'lerde periyodik aralığı artırın.
- SensorManager: İşleyiciyi kaydederken maxReportLatencyMs değerini belirterek toplu işleme özelliğinden yararlanın.
- Fused Location Provider:
- En son önbelleğe alınmış konum için getLastLocation'ı kullanarak konum alma sıklığını azaltın.
- Daha az pil gücü tüketen bir güncelleme yöntemi için setPriority(PRIORITY_PASSIVE) kullanın.
- Ayrıca, setMinUpdateIntervalMillis ile minimum güncelleme aralığı ayarlayarak konumları toplu işleme mekanizmasından yararlanabilirsiniz.
Daha fazla ayrıntıyı uyandırma 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 olsa aşırı uyanık tutma kilidi kullanımı olabilir. Uygulamanız Play Console'da işaretlenirse uygulamanızda hata ayıklamak için aşağıdaki adımları uygulayın:
Play Console ile ilk tanımlama
Android vitals 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ümleri sağlanır. Bu dökümlerde etkilenen oturumlar ve süreler gösterilir. Wake lock adının uygulama tarafından mı yoksa başka bir API tarafından mı tutulduğunu belirlemek için dokümanları kullanabileceğinizi hatırlatırız.
Aşırı sayıda kısmi uyanık kalma kilidiyle ilgili Android vitals kontrol panelinde, aşırı sayıda uyanık kalma kilidi etiketlerini görüntülemek için ayrıntılar bölümüne kaydırıldı.
Çalışanlar/işler tarafından tutulan aşırı sayıda uyanık kalma kilidinde hata ayıklama
Çalışan tarafından tutulan uyandırma kilitlerini şu uyandırma kilidi adıyla tanımlayabilirsiniz:
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Çalışan tarafından tutulan uyandırma kilidi adlarının tüm varyasyonlarının listesini belgeler bölümünde bulabilirsiniz. Bu uyanık kalma kilitlerinde hata ayıklamak için yerel olarak hata ayıklamak üzere Background Task Inspector'ı kullanabilir veya sahada sorunları ayıklamak için getStopReason'dan yararlanabilirsiniz.
Android Studio Background Task Inspector
Sık sık yeniden denenip başarısız olan "WeatherSyncWorker" adlı bir çalışanın tanımlanabildiği Background Task Inspector'ın ekran görüntüsü.
WorkManager sorunlarının yerel olarak hata ayıklanması için bu aracı bir emülatörde veya bağlı cihazda (API düzeyi 26 ve üzeri) kullanın. Bu 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ına ulaşması nedeniyle sık sık başarısız olup yeniden denediğini gösterebilir.
Daha fazla bilgi için Background Task Inspector belgelerini inceleyin.
WorkManager getStopReason
Aşırı uyandırma kilidi olan çalışanların sahada hata ayıklaması için WorkManager 2.9.0 sürümü ve sonraki sürümlerde WorkInfo.getStopReason()'ı, JobScheduler için ise SDK 31 ve sonraki sürümlerde kullanılabilen JobParameters.getStopReason()'ı kullanın.
Bu API, bir çalışanın neden durduğunu (ör.STOP_REASON_TIMEOUT, STOP_REASON_QUOTA) kaydetmeye yardımcı olur. Böylece, çalışma zamanı süresinin dolması nedeniyle sık sık zaman aşımına uğrama gibi sorunlar tespit edilebilir.
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
Uyanık tutma kilitlerinin manuel olarak tutulduğu veya uyanık tutma kilidini tutan API'lerin kullanıldığı daha karmaşık senaryolarda hata ayıklamak için sistem izi toplama özelliğini kullanmanızı öneririz.
Sistem izleme verilerinin toplanması
Sistem izi , 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ş süresi ile uyanık kalma kilidi kullanımı gibi pille ilgili metrikler hakkında analizler sağlar.
Sistem izlemeyi çeşitli yöntemlerle 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 kaydı alma.
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 izlemelerinin görüntülenmesini sağlamak için "power:PowerManagement" Atrace kategorisini topladığınızdan emin olmanız çok önemlidir.
Perfetto UI incelemesi 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ştirilmiş halini görürsünüz. Bu rehberde odaklanacağımız izler "Cihaz Durumu" bölümündekilerdir.
Uzun süren uyanık kalma kilidi dilimlerini görsel olarak belirlemek için "Cihaz durumu" bölümündeki "En çok kullanılan uygulama", "Ekran durumu", "Uzun uyanık kalma kilitleri" ve "İşler" gibi izleri sabitleyin.
Her blokta etkinliğin adı, başlangıç zamanı ve bitiş zamanı listelenir. Perfetto'da buna dilim denir.
Birden fazla izlemenin ölçeklenebilir analizi için Perfetto'nun SQL analizini kullanabilirsiniz. SQL sorgusu, süreye göre sıralanmış tüm uyandırma kilitlerini bulabilir ve aşırı kullanıma en çok katkıda bulunanları belirlemeye yardımcı olabilir.
Aşağıda, sistem izlemede gerçekleşen tüm uyanık kalma kilidi etiketlerini toplam süreye göre sıralayarak toplayan bir sorgu örneği verilmiştir:
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
Sahada izleme toplama için ProfilingManager'ı kullanma
Yeniden üretilmesi zor sorunlar için ProfilingManager (SDK 35'te eklenmiştir), geliştiricilerin başlangıç 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.
Alan sistem izi toplama özelliğini uygulama ile ilgili diğer adımlar için ProfilingManager dokümanlarına göz atın. Bu adımlar arasında programatik olarak izleme yakalama, profil oluşturma verilerini analiz etme ve yerel hata ayıklama komutlarını kullanma 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ştiricileri pilin hızlı tükenmesini azaltma ve uygulama kalitesini iyileştirme konusunda destekleme konusundaki devam eden taahhüdümüzün yalnızca küçük bir parçasıdır.
Uyandırma kilitlerini anlayıp doğru şekilde uygulayarak uygulamanızın pil performansını önemli ölçüde optimize edebilirsiniz. Alternatif API'lerden yararlanmak, uyandırma 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'deki başarısını sağlamanın anahtarıdır.
Okumaya devam edin
-
Ürün Haberleri
Android Emulator ile çeşitli cihaz etkileşimlerini test etmek artık her zamankinden daha kolay.
Steven Jenkins • Okuma süresi: 2 dakika
-
Ürün Haberleri
Her geliştiricinin yapay zeka iş akışı ve ihtiyaçları benzersizdir. Bu nedenle, yapay zekanın geliştirme sürecinize nasıl yardımcı olacağını seçebilmeniz önemlidir. Ocak ayında, Android Studio'daki yapay zeka işlevlerine güç katmak için yerel veya uzak bir yapay zeka modeli seçme özelliğini kullanıma sunduk.
Matthew Warner • Okuma süresi: 2 dakika
-
Ürün Haberleri
Android Studio Panda 3 artık kararlı ve üretimde kullanıma hazır. Bu sürüm, yapay zeka destekli iş akışlarınız üzerinde daha fazla kontrol ve özelleştirme imkanı sunarak yüksek kaliteli Android uygulamaları oluşturmayı her zamankinden daha kolay hale getiriyor.
Matt Dyor • Okuma süresi: 3 dk.
Gelişmelerden haberdar olun
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.