Uyandırmalar, AlarmManager
API'deki bir mekanizmadır. Bu mekanizma, geliştiricilerin bir cihazı belirli bir saatte uyandırmak için alarm ayarlamasına olanak tanır. Uygulamanız, RTC_WAKEUP
veya ELAPSED_REALTIME_WAKEUP
işaretiyle AlarmManager
uygulamasındaki set()
yöntemlerinden birini çağırarak uyandırma alarmı ayarlar. Uyandırma alarmı tetiklendiğinde, cihaz düşük güç modundan çıkar ve alarmın onReceive()
veya onAlarm()
yöntemini çalıştırırken kısmi uyanık kalma kilidi çalıştırır. Uyandırma alarmları aşırı derecede tetiklenirse cihazın pilini bitirebilir.
Android, uygulama kalitesini iyileştirmenize yardımcı olmak için uygulamaları aşırı sayıda uyandırma alarmlarına karşı otomatik olarak izler ve bilgileri Android vitals'da gösterir. Verilerin nasıl toplandığı hakkında bilgi edinmek için Play Console belgelerine göz atın.
Uygulamanız cihazı çok sık uyandırıyorsa sorunu teşhis etmek ve düzeltmek için bu sayfadaki talimatları kullanabilirsiniz.
Sorunu çöz
AlarmManager
, Android platformunun ilk sürümlerinde kullanıma sunulmuştu ancak daha önce AlarmManager
gerektiren birçok kullanım alanı, zaman içinde WorkManager gibi yeni özellikler tarafından daha iyi hizmet vermeye başladı.
Bu bölümde, uyandırma alarmlarını azaltmayla ilgili ipuçları yer alır ancak en iyi uygulamalar bölümündeki önerileri uygulamak için uzun vadede uygulamanızı taşımanız önerilir.
Uygulamanızda uyandırma alarmları programladığınız yerleri belirleyin ve bu alarmların tetiklenme sıklığını azaltın. Aşağıda bazı ipuçlarını görebilirsiniz:
AlarmManager
içindeRTC_WAKEUP
veyaELAPSED_REALTIME_WAKEUP
işaretini içeren çeşitliset()
yöntemlerine yapılan çağrıları arayın.Paketinizin, sınıfınızın veya yönteminizin adını alarmınızın etiket adına eklemenizi öneririz. Böylece, kaynağınızda alarmın ayarlandığı konumu kolayca belirleyebilirsiniz. Aşağıda bazı ek ipuçları verilmiştir:
- Ada e-posta adresi gibi kimliği tanımlayabilecek bilgiler (PII) eklemeyin. Aksi takdirde cihaz, alarm adı yerine
_UNKNOWN
günlüğe kaydeder. - Sınıf veya yöntem adını programatik olarak almayın (örneğin,
getName()
yöntemini çağırarak) ProGuard tarafından kod karartılabilir. Bunun yerine sabit kodlanmış bir dize kullanın. - Alarm etiketlerine sayaç veya benzersiz tanımlayıcılar eklemeyin. Hepsinin benzersiz tanımlayıcıları olduğundan sistem, bu şekilde ayarlanan alarmları toplayamaz.
- Ada e-posta adresi gibi kimliği tanımlayabilecek bilgiler (PII) eklemeyin. Aksi takdirde cihaz, alarm adı yerine
Sorunu düzelttikten sonra aşağıdaki ADB komutunu çalıştırarak uyandırma alarmlarınızın beklendiği gibi çalıştığını doğrulayın:
adb shell dumpsys alarm
Bu komut, cihazdaki alarm sistemi hizmetinin durumu hakkında bilgi sağlar. Daha fazla bilgi için dumpsys bölümüne bakın.
En iyi uygulamalar
Uyandırma alarmlarını yalnızca uygulamanızın kullanıcıya yönelik bir işlem (bildirim yayınlama veya kullanıcıyı uyarma gibi) yapması gerektiğinde kullanın. AlarmManager en iyi uygulamalarının listesi için Alarm Planlama konusuna bakın.
Arka plan görevlerini, özellikle de tekrarlanan veya ağ arka plan görevlerini planlamak için AlarmManager
kullanmayın. Aşağıdaki avantajları sunduğu için arka plan görevlerini planlamak için WorkManager'ı kullanın:
- toplu işleme - pil tüketiminin azaltılması için işler birleştirilir
- kalıcılık - cihaz yeniden başlatılırsa planlanan WorkManager işleri, yeniden başlatma bittikten sonra çalışır
- kriterler: İşler, cihazın şarj olup olmadığı veya kablosuz ağ mevcut olup olmadığı gibi koşullara göre çalıştırılabilir.
Daha fazla bilgi için Arka planda işleme rehberini inceleyin.
Yalnızca uygulama çalışırken geçerli olan zamanlama işlemlerini planlamak için AlarmManager
kullanmayın (başka bir deyişle, zamanlama işlemi kullanıcı uygulamadan çıktığında iptal edilmelidir). Bu gibi durumlarda, kullanımı daha kolay ve çok daha verimli olduğu için Handler
sınıfını kullanın.
Sizin için önerilenler
- Not: Bağlantı metni JavaScript kapalıyken gösterilir
- Takılı kalan kısmi uyanık kalma kilitleri
- ANR'ler