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
sebelumnya adalah
diperkenalkan di versi awal platform Android, tetapi seiring waktu, banyak penggunaan
kasus yang sebelumnya memerlukan
AlarmManager
kini
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 berbagai metode
set()
diAlarmManager
yang mencakup flagRTC_WAKEUP
atauELAPSED_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.
- Kosongkan informasi identitas pribadi (PII) dalam nama, seperti
alamat email. Jika tidak, perangkat akan mencatat
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.
Direkomendasikan untuk Anda
- Catatan: teks link ditampilkan saat JavaScript nonaktif
- Penguncian layar saat aktif parsial bermasalah
- ANR