Pratinjau Developer Android 11 kedua kini tersedia, uji dan sampaikan masukan Anda.

Bangun 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 flag RTC_WAKEUP atau ELAPSED_REALTIME_WAKEUP . Saat alarm bangun dipicu, perangkat keluar dari mode daya rendah dan menunda penguncian layar saat aktif parsial saat mengeksekusi metode onReceive() atau onAlarm() alarm. Jika dipicu secara berlebihan, alarm bangun dapat menghabiskan baterai perangkat.

Untuk membantu Anda menyempurnakan kualitas aplikasi, Android otomatis memantau aplikasi untuk menemukan alarm bangun yang berlebihan dan menampilkan informasi di Android vitals. Untuk 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 dilayani 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 metode set() sebelumnya di AlarmManager yang mengecualikan 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 log _UNKNOWN, bukan nama alarm.
    • Jangan mendapatkan nama class atau metode sesuai program, misalnya dengan memanggil getName(), karena dapat di-obfuscate 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 alarm di perangkat. Untuk informasi selengkapnya, lihat dumpsys.

Praktik terbaik

Gunakan alarm bangun hanya jika aplikasi perlu melakukan operasi yang berinteraksi 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 - pekerjaan digabungkan agar konsumsi baterai dikurangi
  • persistensi - jika perangkat di-reboot, pekerjaan WorkManager yang dijadwalkan akan berjalan setelah reboot selesai
  • kriteria - pekerjaan dapat berjalan berdasarkan kondisi, seperti apakah perangkat sedang mengisi daya atau apakah Wi-Fi tersedia

Untuk informasi selengkapnya, lihat Panduan untuk permosesan 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.