Tindakan pengaktifan yang berlebihan

Bangun adalah mekanisme dalam AlarmManager API yang memungkinkan developer menyetel alarm untuk membangunkan perangkat pada waktu yang ditentukan. Aplikasi menyetel alarm bangun dengan memanggil salah satu metode set() di AlarmManager dengan tanda RTC_WAKEUP atau ELAPSED_REALTIME_WAKEUP. Saat alarm bangun dipicu, perangkat akan keluar dari mode daya rendah dan menunda penguncian layar saat aktif parsial ketika mengeksekusi metode onReceive() atau onAlarm() alarm. Jika dipicu secara berlebihan, alarm bangun dapat menghabiskan baterai perangkat.

Untuk membantu Anda meningkatkan kualitas aplikasi, Android otomatis memantau aplikasi untuk menemukan alarm bangun berlebihan dan menampilkan informasi di Android vitals. Untuk mengetahui informasi tentang cara data dikumpulkan, lihat dokumen Konsol Play.

Jika aplikasi membangunkan perangkat secara berlebihan, Anda dapat menggunakan panduan di halaman ini untuk mendiagnosis dan memperbaiki masalahnya.

Memperbaiki masalah

AlarmManager diperkenalkan di platform Android versi awal, tetapi seiring waktu, banyak kasus penggunaan yang sebelumnya memerlukan AlarmManager sekarang ditampilkan dengan lebih baik oleh fitur baru seperti WorkManager. Bagian ini berisi tips untuk mengurangi alarm bangun, tetapi dalam jangka panjang, pertimbangkan untuk memigrasi aplikasi dengan mengikuti rekomendasi di bagian praktik terbaik.

Identifikasi tempat di aplikasi yang digunakan untuk menjadwalkan alarm bangun dan kurangi frekuensi dipicunya alarm tersebut. Berikut ini beberapa tips:

  • Cari panggilan ke berbagai metode set() di AlarmManager yang mencakup flag RTC_WAKEUP atau ELAPSED_REALTIME_WAKEUP.

  • Sebaiknya sertakan nama paket, class, atau metode dalam nama tag alarm agar Anda dapat dengan mudah mengidentifikasi lokasi di sumber tempat alarm disetel. Berikut ini beberapa tips tambahan:

    • Kosongkan informasi identitas pribadi (PII) dalam nama, seperti alamat email. Jika tidak, perangkat akan mencatat _UNKNOWN log, bukan nama alarm.
    • Jangan mendapatkan nama class atau metode secara terprogram, misalnya dengan memanggil getName(), karena dapat diobfuscated oleh Proguard. Sebaiknya gunakan string hard code.
    • Jangan menambahkan penghitung atau ID unik ke tag alarm. Sistem tidak dapat menggabungkan alarm yang disetel dengan cara tersebut karena semua memiliki ID unik.

Setelah memperbaiki masalah, verifikasi bahwa alarm bangun berfungsi sesuai yang diharapkan dengan menjalankan perintah ADB berikut:

adb shell dumpsys alarm

Perintah ini menyediakan informasi tentang status layanan sistem di perangkat. Untuk mengetahui informasi selengkapnya, lihat dumpsys.

Praktik terbaik

Gunakan alarm bangun hanya jika aplikasi perlu melakukan operasi yang ditampilkan kepada pengguna (seperti memposting notifikasi atau memberi tahu pengguna). Untuk daftar praktik terbaik AlarmManager, lihat Menjadwalkan Alarm Berulang.

Jangan menggunakan AlarmManager untuk menjadwalkan tugas latar belakang, terutama tugas latar belakang jaringan atau berulang. Gunakan WorkManager untuk menjadwalkan tugas latar belakang karena menawarkan manfaat berikut:

  • batching - tugas digabungkan agar konsumsi baterai dikurangi
  • persistensi - jika perangkat dimulai ulang, tugas WorkManager yang dijadwalkan akan berjalan setelah mulai ulang selesai
  • kriteria - tugas dapat berjalan berdasarkan kondisi, seperti apakah perangkat sedang mengisi daya atau apakah Wi-Fi tersedia

Untuk mengetahui informasi selengkapnya, lihat Panduan untuk pemrosesan latar belakang.

Jangan menggunakan AlarmManager untuk menjadwalkan operasi pengaturan waktu yang hanya valid saat aplikasi sedang berjalan (dengan kata lain, operasi pengaturan waktu harus dibatalkan saat pengguna keluar dari aplikasi). Dalam situasi demikian, gunakan class Handler karena lebih mudah digunakan dan jauh lebih efisien.