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 önemli bir yönüdür ve uyandırma kilitleri bu konuda büyük bir rol oynar. Bunları 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 pilin hızlı tükenmesini izliyor ve temel performans göstergesi olarak aşırı sayıda kısmi uyanık kalma kilidi kullanımına odaklanıyor.
Bu özellik, pil verimliliğinin önemini, mevcut temel metrik kararlılık göstergeleri olan kullanıcı tarafından algılanan aşırı kilitlenme ve ANR'lerin yanı sıra 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 yüzeylerinden 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ı olarak değerlendirir:
- Uyandırma 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'leri tarafından oluşturulan uyandırma kilitleri, uyandırma kilidi hesaplamasından muaf tutulur.
Uyanık kalma kilitlerini anlama
Uyanık kalma kilidi, kullanıcının cihazla etkin olarak etkileşimde bulunmadığı durumlarda bile bir 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 edinilir:
- Uygulama, belirli bir kullanım alanı için PowerManager API'lerini kullanarak uyandırma kilidini manuel olarak alır ve serbest bırakır. Bu kilit genellikle ön plan hizmeti ile birlikte alınır. Ön plan hizmeti, kullanıcı tarafından algılanabilen işlemler için tasarlanmış bir platform yaşam döngüsü API'sidir.
- Alternatif olarak, uyanık kalma kilidi başka bir API tarafından alınır ve API 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 uygunsuz 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 durumlar gördük.
Uyandırma kilidi kullanımıyla ilgili en iyi uygulamalar
Aşırı uyanık tutma kilidi kullanımında hata ayıklama yöntemlerine geçmeden önce uyanık tutma 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ış çizelgesini uygulayın:
Uyanık kalma kilidinin ne zaman manuel olarak alınacağına karar verme 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: 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 bir bildirimi güncellemek için uyanık kalma kilidi gerekmez.
- Evet: Cihazın askıya alınmasını önlemek kritikse (ör. harici bir cihazla devam eden iletişim) devam edin.
- Cihazı sizin adınıza uyanık tutan bir API zaten var mı?
- Diğer API'ler tarafından oluşturulan uyandırma kilitlerinin bulunduğu senaryoları belirlemek için Diğer API'ler tarafından oluşturulan uyandırma kilitlerini belirleme dokümanından yararlanabilirsiniz. Örneğin, LocationManager gibi diğer API'ler tarafından oluşturulan uyandırma kilitlerinin bulunduğu senaryoları belirleyebilirsiniz.
- 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 etmelisiniz.
2. Uyanık kalma kilidini doğru şekilde adlandırıyor musunuz?
Uyanık kalma kilitleri manuel olarak edinilirken hata ayıklama için uygun adlandırma önemlidir:
- Adlarda, e-posta adresleri gibi kimliği tanımlayabilecek bilgiler (PII) kullanmayın. Kişisel olarak tanımlanabilecek bilgiler algılanırsa uyandırma 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 uyanık kalma 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ı tespit etmek kolaylaşır.
3. Edinilen 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 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 kilidin süresiz olarak tutulmasını önleyebilirsiniz.
fun processingWork() {
wakeLock.apply {
try {
acquire(60 * 10 * 1000) // timeout after 10 minutes
doTheWork()
} finally {
release()
}
}
}4. Can you reduce the wake-up frequency?
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: Dinleyiciyi kaydederken maxReportLatencyMs değerini belirterek toplu işlemden 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 tüketen bir güncelleme yöntemi için setPriority(PRIORITY_PASSIVE) kullanın.
- Ayrıca, setMinUpdateIntervalMillis ile minimum güncelleme aralığı ayarlayarak konum toplama 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 aşırı uyanık kalma kilidi kullanımı gerçekleşebilir. Uygulamanız Play Console'da işaretlenirse hata ayıklama işlemini şu şekilde yapabilirsiniz:
Play Console ile ilk tanımlama
Android vitals'daki aşırı kısmi uyanık kalma kilidi kontrol panelinde, uygulamanızla ilişkili ve muaf tutulmayan uyanık kalma kilidi adlarının dökümleri sağlanır. Bu dökümlerde, 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 dokümanları kullanmayı unutmayın.
Aşırı sayıda kısmi uyanık kalma kilidi Android vitals kontrol panelinde, aşırı sayıda uyanık kalma kilidi etiketlerini görüntülemek için dökümler 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 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 uyandırma kilidi adlarının tüm varyasyonlarının listesini dokümanlarda 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 Arka Plan Görevi Denetleyicisi
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 Arka Plan Görevi Denetleyicisi dokümanlarına bakın.
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()'ı veya JobScheduler için SDK 31 ve sonraki sürümlerde JobParameters.getStopReason()'ı kullanın.
Bu API, bir çalışanın neden durduğunu (ör. STOP_REASON_TIMEOUT, STOP_REASON_QUOTA) kaydetmeye yardımcı olur ve çalışma zamanı süresinin dolması nedeniyle sık sık zaman aşımına uğrama gibi sorunları belirler.
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 bilgi 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
- İzi cihazda doğrudan geliştirici seçeneklerinden manuel olarak 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 izlemelerinin görüntülenmesini sağlamak için "power:PowerManagement" Atrace kategorisini topladığınızdan emin olmanız gerekir.
Perfetto UI 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ştirilmiş halini görürsünüz. Bu rehberde odaklanacağımız izler "Cihaz Durumu" bölümündekilerdir.
Uzun süren uyandırma kilidi dilimlerini görsel olarak belirlemek için "Cihaz durumu" bölümündeki "En üstteki uygulama", "Ekran durumu", "Uzun uyandırma kilitleri" ve "İşler" gibi izleri sabitleyin.
Her blokta etkinliğin adı, başlangıç 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 izinde 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
Saha içi iz toplama için ProfilingManager'ı kullanma
Yeniden üretilmesi zor sorunlar için ProfilingManager (SDK 35'te eklendi), geliştiricilerin başlangıç ve bitiş tetikleyicileriyle sahada sistem izlemeleri toplamasına olanak tanıyan programatik bir API'dir. Profil toplama için başlangıç ve bitiş tetikleme noktaları üzerinde daha fazla kontrol olanağı sunar ve cihaz performansının etkilenmesini önlemek için sistem düzeyinde sıklık sınırlaması uygular.
İzleme yakalama, profil oluşturma verilerini analiz etme ve yerel hata ayıklama komutlarını kullanma gibi alan sistemi izleme koleksiyonunu uygulama hakkında daha fazla bilgi için ProfilingManager dokümanlarına göz atın.
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 artırma 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ğlamak için çok önemlidir.
-
Ürün HaberleriGoogle Play'de, büyümenizi sağlamanıza, yeni iş modellerine uyum sağlamanıza ve kullanıcılarınıza tam olarak bulundukları yerde ulaşmanıza yardımcı olmak için abonelik platformumuzu sürekli olarak genişletiyoruz.
Sheenam Mittal • Okuma süresi: 4 dakika -
Ürün HaberleriGeçen yıl Android Studio, tüm yapay zeka modellerine açıldı. Bugün, kodlama aracınızı seçme desteğini sunarak bir sonraki adımı atıyoruz.
Matthew Warner • Okuma süresi: 3 dk. -
Ürün HaberleriGooglebook, ortak bir Android temeli üzerine inşa edilmiş yeni bir dizüstü bilgisayar kategorisini tanıtıyor. HP, Dell, Lenovo, Acer ve Asus gibi iş ortaklarının yüksek performanslı donanımları, mobil kolaylığı masaüstü gücüyle birleştirir.
Fahd Imtiaz, Loryn Hairston • Okuma süresi: 4 dakika
Android geliştirmeyle ilgili en son analizleri haftalık olarak gelen kutunuza alın.