Aşırı sayıda wakeup

Uyandırma, geliştiricilerin belirli bir saatte cihazı uyandırmak için alarm kurmasına olanak tanıyan AlarmManager API'sindeki bir mekanizmadır. Uygulamanız, AlarmManager içindeki set() yöntemlerinden birini RTC_WAKEUP veya ELAPSED_REALTIME_WAKEUP işaretiyle çağırarak uyandırma alarmı ayarlıyor. Uyandırma alarmı tetiklendiğinde cihaz, düşük güç modundan çıkar ve alarmın kısmi uyandırma kilidini tutar. Bu sırada alarmın onReceive() veya onAlarm() yöntemi yürütülür. Uyandırma alarmları aşırı tetiklenirse cihazın pilini boşaltabilir.

Uygulamanız cihazı aşırı derecede uyandırıyorsa sorunu teşhis etmek ve düzeltmek için bu sayfadaki yönergeleri kullanabilirsiniz.

Sorunu düzeltme

AlarmManager, Android platformunun ilk sürümlerinde kullanıma sunulmuştu. Ancak zaman içinde, daha önce AlarmManager gerektiren birçok kullanım alanı, artık WorkManager gibi daha yeni özelliklerle daha iyi destekleniyor. Bu bölümde, uyandırma alarmlarını azaltmayla ilgili ipuçları yer almaktadır. Ancak uzun vadede, uygulamanızı en iyi uygulamalar bölümündeki önerilere uyacak şekilde taşımayı düşünebilirsiniz.

Uygulamanızda uyandırma alarmlarını planladığınız yerleri belirleyin ve bu alarmların tetiklenme sıklığını azaltın. Aşağıda bazı ipuçlarını görebilirsiniz:

  • set() AlarmManager içindeki çeşitli RTC_WAKEUP yöntemlere yapılan çağrıları arayın. Bu yöntemler, ELAPSED_REALTIME_WAKEUP veya RTC_WAKEUP işaretini içerir.

  • Kaynağınızda alarmın ayarlandığı konumu kolayca belirleyebilmeniz için paket, sınıf veya yöntem adınızı alarmınızın etiket adına eklemenizi öneririz. Aşağıda bazı ek ipuçları verilmiştir:

    • Ad kısmında e-posta adresi gibi kişisel veri kullanmayın. Aksi takdirde, cihaz alarm adı yerine _UNKNOWN kaydeder.
    • Proguard tarafından karartılabileceği için sınıf veya yöntem adını programatik olarak (ör. getName() çağırarak) almayın. Bunun yerine sabit kodlanmış bir dize kullanın.
    • Alarm etiketlerine sayaç veya benzersiz tanımlayıcı eklemeyin. Bu şekilde ayarlanan alarmların her birinin benzersiz tanımlayıcıları olduğundan sistem, bu alarmları toplayamaz.

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 sistemine ait hizmetin durumu hakkında bilgi sağlar. Daha fazla bilgi için dumpsys sayfasına bakın.

En iyi uygulamalar

Yalnızca uygulamanızın kullanıcıya yönelik bir işlem (ör. bildirim yayınlama veya kullanıcıyı uyarma) gerçekleştirmesi gerekiyorsa uyandırma alarmlarını kullanın. AlarmManager ile ilgili en iyi uygulamaların listesi için Alarmları Planlama başlıklı makaleyi inceleyin.

Arka plan görevlerini, özellikle tekrarlanan veya ağ arka plan görevlerini planlamak için AlarmManager kullanmayın. Arka plan görevlerini planlamak için WorkManager'ı kullanın. Bu kitaplık aşağıdaki avantajları sunar:

  • Toplu işleme: Pil tüketimini azaltmak için işler birleştirilir.
  • Kalıcılık: Cihaz yeniden başlatılırsa planlanmış WorkManager görevleri yeniden başlatma işlemi tamamlandıktan sonra çalışır.
  • kriterler: İşler, cihazın şarj olup olmaması veya kablosuz bağlantının kullanılabilirliği gibi koşullara göre çalıştırılabilir.

Daha fazla bilgi için Arka planda işleme kılavuzu başlıklı makaleyi inceleyin.

Yalnızca uygulama çalışırken geçerli olan zamanlama işlemlerini planlamak için AlarmManager kullanmayın (diğer bir deyişle, kullanıcı uygulamadan çıktığında zamanlama işlemi iptal edilmelidir). Bu durumlarda, kullanımı daha kolay ve çok daha verimli olduğu için Handler sınıfını kullanın.