Alarm (berdasarkan kelas // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )0) menyediakan cara untuk melakukan operasi berbasis waktu di luar waktu aktif aplikasi Anda. Misalnya, Anda dapat menggunakan alarm untuk memulai operasi jangka panjang, seperti memulai layanan sekali sehari untuk mengunduh prakiraan cuaca Show Alarm memiliki karakteristik sebagai berikut
Catatan. Untuk pemilihan jam operasional yang dijamin terjadi selama waktu aktif aplikasi Anda, pertimbangkan untuk menggunakan kelas // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )1 bersama dengan // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )2 dan // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )3. Pendekatan ini memberi Android kontrol yang lebih baik atas sumber daya sistem Pahami konsekuensinyaAlarm berulang adalah mekanisme yang relatif sederhana dengan fleksibilitas terbatas. Alarm mungkin bukan pilihan terbaik untuk aplikasi Anda, terutama jika Anda perlu memicu operasi jaringan. Alarm yang dirancang dengan buruk dapat menguras baterai dan membebani server Skenario umum untuk memicu operasi di luar waktu aktif aplikasi adalah saat menyinkronkan data dengan server. Dalam hal ini Anda mungkin tertarik untuk menggunakan alarm berulang. Namun, jika Anda adalah pemilik server yang menghosting data aplikasi Anda, penggunaan Google Cloud Messaging (GCM) bersama dengan adaptor sinkronisasi adalah solusi yang lebih baik daripada // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )0. Adaptor sinkronisasi memberi Anda semua opsi penjadwalan yang sama seperti // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )0, tetapi memberikan lebih banyak fleksibilitas. Misalnya, sinkronisasi dapat didasarkan pada pesan "data baru" dari server/perangkat (buka Menjalankan Adaptor Sinkronisasi untuk perincian), ada (atau tidak adanya) aktivitas pengguna, waktu, dan lainnya. Buka video yang tertaut di bagian atas halaman ini untuk diskusi mendetail tentang kapan dan bagaimana menggunakan GCM dan adaptor sinkronisasi Alarm tidak akan terpicu saat perangkat menganggur dalam mode Istirahat. Semua alarm terjadwal akan ditunda hingga perangkat tidak lagi dalam mode Tunda. Jika Anda perlu memastikan bahwa pekerjaan Anda selesai bahkan saat perangkat tidak digunakan, ada beberapa opsi yang tersedia. Anda dapat menggunakan // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )6 atau // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )7 untuk menjamin bahwa alarm akan terpicu. Pilihan lainnya adalah menggunakan WorkManager API baru, yang dibuat untuk melakukan pekerjaan latar belakang sekali atau secara berkala. Untuk informasi selengkapnya, buka Penjadwalan tugas dengan WorkManager KiatSetiap pilihan yang Anda buat dalam merancang alarm berulang dapat memiliki konsekuensi terhadap cara aplikasi menggunakan (atau menyalahgunakan) sumber daya sistem. Misalnya, bayangkan aplikasi populer yang disinkronkan dengan server. Jika operasi sinkronisasi didasarkan pada waktu jam dan setiap instance aplikasi disinkronkan pada 23. 00, beban di server dapat menyebabkan latensi tinggi atau bahkan "denial of service". Ikuti praktik terbaik penggunaan alarm berikut
Atur alarm berulangSeperti dijelaskan di atas, alarm berulang adalah pilihan yang baik untuk menjadwalkan acara rutin atau pengambilan data. Alarm berulang memiliki karakteristik sebagai berikut
Untuk membatalkan // Hopefully your alarm will have a lower frequency than this! alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent);_4, teruskan ke untuk mendapatkan instance maksud (jika ada), lalu teruskan maksud ke
// Hopefully your alarm will have a lower frequency than this! alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent);_4 dibuat dengan , maksud tidak dapat dicabut Pilih jenis alarmSalah satu pertimbangan awal dalam menggunakan alarm berulang adalah jenisnya Ada dua jenis umum jam alarm. "waktu nyata berlalu" dan "jam waktu nyata" (RTC). Waktu nyata yang berlalu menggunakan "waktu sejak boot sistem" sebagai referensi, dan jam waktu nyata menggunakan waktu UTC (jam dinding). Artinya, elapsed real time cocok untuk menyetel alarm berdasarkan waktu yang telah berlalu (misalnya alarm yang dipicu setiap 30 detik) karena jenis alarm ini tidak terpengaruh oleh zona waktu/lokal. Jenis jam waktu nyata lebih cocok untuk alarm yang bergantung pada lokal saat ini Kedua tipe tersebut memiliki versi "wakeup", yang memberi tahu CPU perangkat untuk aktif jika layar tidak aktif. Ini akan memastikan bahwa alarm dipicu pada waktu yang dijadwalkan. Ini berguna jika aplikasi Anda memiliki dependensi waktu—misalnya, jika aplikasi memiliki jendela terbatas untuk melakukan operasi tertentu. Jika Anda tidak menggunakan versi bangun dari jenis alarm Anda, maka semua alarm berulang akan dipicu saat perangkat aktif di lain waktu Jika Anda hanya perlu alarm dipicu pada interval tertentu, (misalnya setiap setengah jam), gunakan salah satu jenis waktu nyata yang telah berlalu. Secara umum, ini adalah opsi yang lebih baik Jika Anda ingin alarm dipicu pada waktu tertentu dalam sehari, pilih salah satu jenis jam waktu nyata berbasis jam. Namun, perlu diperhatikan bahwa pendekatan ini memiliki beberapa kelemahan—aplikasi mungkin tidak dapat menerjemahkan dengan baik ke lokal lain, dan jika pengguna mengubah setelan waktu perangkat, tindakan tersebut dapat menyebabkan perilaku yang tidak diharapkan dalam aplikasi. Penggunaan jenis alarm jam waktu nyata juga tidak berskala dengan baik, seperti yang dijelaskan di atas. Jika memungkinkan, sebaiknya gunakan alarm "elapsed real time". Berikut adalah daftar jenis alarm
Contoh alarm berlalu waktu nyataBerikut adalah beberapa contoh penggunaan private var alarmMgr: AlarmManager? = null private lateinit var alarmIntent: PendingIntent ... alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager alarmIntent = Intent(context, AlarmReceiver::class.java).let { intent -> PendingIntent.getBroadcast(context, 0, intent, 0) } alarmMgr?.set( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent )1 Mengaktifkan perangkat untuk memicu alarm dalam 30 menit, dan setiap 30 menit setelahnya
Mengaktifkan perangkat untuk memicu alarm sekali (tidak berulang kali) dalam satu menit
Contoh alarm jam waktu nyataBerikut adalah beberapa contoh penggunaan ________19______3 Aktifkan perangkat untuk memicu alarm sekitar pukul 2 siang. 00, lalu ulangi sekali sehari pada waktu yang sama
Aktifkan perangkat untuk memicu alarm tepat pukul 08.00. 30, dan setiap 20 menit sesudahnya
Menentukan seberapa akurat alarm Anda seharusnyaSeperti yang telah dijelaskan di atas, pemilihan jenis alarm seringkali menjadi langkah pertama dalam membuat alarm. Perbedaan lebih lanjut adalah seberapa akurat alarm Anda seharusnya. Untuk sebagian besar aplikasi, // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )_8 adalah pilihan yang tepat. Saat Anda menggunakan metode ini, Android menyinkronkan beberapa alarm berulang dan memicunya secara bersamaan. Ini akan mengurangi pemborosan baterai Untuk aplikasi langka yang memiliki persyaratan waktu yang kaku—misalnya, alarm harus dipicu tepat pukul 08.00. 30, dan setiap jam setelahnya—gunakan // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )9. Namun, jika memungkinkan, sebaiknya hindari penggunaan alarm yang akurat Dengan // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )_8, Anda tidak dapat menentukan interval tertentu seperti yang Anda bisa dengan // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )9. Anda harus menggunakan salah satu konstanta interval, seperti private AlarmManager alarmMgr; private PendingIntent alarmIntent; ... alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmReceiver.class); alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent);0, private AlarmManager alarmMgr; private PendingIntent alarmIntent; ... alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmReceiver.class); alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent);1, dan seterusnya. Buka // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )0 untuk melihat daftar lengkap Batalkan alarmTergantung pada aplikasinya, Anda mungkin ingin menyertakan kemampuan untuk membatalkan alarm. Untuk membatalkan alarm, hubungi private AlarmManager alarmMgr; private PendingIntent alarmIntent; ... alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmReceiver.class); alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent);_3 di Alarm Manager, yang berlanjut private AlarmManager alarmMgr; private PendingIntent alarmIntent; ... alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmReceiver.class); alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent);4 yang tidak ingin Anda picu. Contoh
Memulai alarm saat perangkat dimulai ulangSecara default, semua alarm dibatalkan setelah perangkat tidak aktif. Untuk mencegah hal ini terjadi, Anda dapat merancang aplikasi untuk memulai ulang alarm berulang secara otomatis jika pengguna melakukan boot ulang perangkat. Tindakan ini memastikan bahwa // Hopefully your alarm will have a lower frequency than this! alarmMgr?.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_HALF_HOUR, alarmIntent )_0 akan terus melakukan tugasnya sehingga pengguna tidak perlu me-restart alarm secara manual Berikut langkah-langkahnya
Dampak fitur Istirahat dan Aplikasi SiagaFitur Istirahat dan Aplikasi Siaga diperkenalkan di Android versi 6. 0 (API level 23) dalam upaya memperpanjang masa pakai baterai. Saat perangkat dalam mode Istirahat, semua alarm standar akan ditunda hingga perangkat keluar dari mode Istirahat atau hingga waktu pemeliharaan dibuka. Jika ada alarm yang harus dipicu bahkan dalam mode Istirahat, Anda dapat menggunakan atau. Aplikasi Anda akan memasuki mode Aplikasi Siaga saat idle, yang berarti pengguna tidak menggunakannya selama jangka waktu tertentu dan aplikasi tidak memiliki proses latar belakang. Saat aplikasi dalam mode Aplikasi Siaga, alarm ditunda seperti dalam mode Istirahat. Pembatasan ini dicabut saat aplikasi tidak lagi menganggur atau jika perangkat dicolokkan ke catu daya. Untuk informasi selengkapnya tentang pengaruh mode ini pada aplikasi Anda, baca Mengoptimalkan Aplikasi untuk Mode Istirahat dan Aplikasi Siaga |