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:
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
_UNKNOWNgü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.