Ü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 dk.
Alice Yuan adlı kullanıcının profilini görüntüle
Alice Yuan Geliştirici İlişkileri Mühendisi, Android

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.

warning.png

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:

wakelock.png

Uyanık kalma kilidinin manuel olarak ne zaman alınacağına karar vermek için akış şeması

  1. Ekranın açık kalması gerekiyor mu?
  2. Uygulama, ön plan hizmeti çalıştırıyor mu?
    • Hayır: Manuel olarak uyanık kalma kilidi edinmeniz gerekmez.
  3. 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.
  4. Cihazı sizin adınıza uyanık tutan bir API zaten var mı?
  5. 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 _UNKNOWN olarak 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ı:

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.

breakdowns2.png

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

taskinspector.png


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: 

powermgmt.png

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.

perfetto.png


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.

Yazan:
Okumaya devam et