Broadcast Receiver — komponen Android yang mendengarkan dan memproses pesan Broadcast sistem, seperti perubahan status jaringan, tingkat daya baterai, penerimaan SMS, atau pemasangan aplikasi. Ini dijalankan oleh sistem operasi saat peristiwa terjadi dan menjalankan tugas di thread utama atau melalui layanan latar belakang. Menurut Android Developer Guide, 2026, Broadcast Receiver memungkinkan aplikasi merespons peristiwa sistem global, bahkan jika tidak sedang berjalan, menjadikannya mekanisme kunci untuk pemrosesan peristiwa latar belakang di ekosistem Android.
Poin Utama
Broadcast Receiver — adalah komponen Android yang dirancang untuk menerima dan memproses pesan Intent yang disebarkan oleh sistem operasi atau aplikasi lain. Berbeda dengan Activity dan Service, Broadcast Receiver tidak memiliki antarmuka pengguna — tugasnya adalah menjalankan tugas pendek saat peristiwa terjadi.
Broadcast Receiver bekerja melalui mekanisme Intent. Sistem atau aplikasi mengirim Intent melalui sendBroadcast atau sendOrderedBroadcast, dan sistem operasi mengirimkannya ke penerima yang terdaftar. Setiap penerima menerima Intent dalam metode onReceive, yang dijalankan di thread utama.
Menurut Android Compatibility Definition Document, Broadcast Receiver harus menyelesaikan onReceive dalam 10 detik — jika tidak, sistem menganggapnya macet dan menghentikan proses. Untuk tugas latar belakang yang panjang, gunakan JobScheduler atau WorkManager yang dijalankan dari penerima.
Android mendukung dua jenis utama Broadcast: Normal Broadcast dan Ordered Broadcast. Perbedaannya terletak pada urutan pengiriman dan kemungkinan menghentikan rantai pemrosesan. Selain itu, Broadcast dibagi menjadi sistem (dihasilkan oleh OS) dan pengguna (dibuat oleh aplikasi).
Normal Broadcast dikirim ke semua penerima terdaftar secara asinkron dan tanpa urutan yang dijamin. Sistem dapat memproses Broadcast semacam itu secara paralel — setiap penerima menerima Intent di thread-nya sendiri. Pemanggilan abortBroadcast di Normal Broadcast tidak berpengaruh: pengiriman ke penerima lain tidak dapat dibatalkan.
Ordered Broadcast dikirim secara berurutan — setiap penerima dalam urutan menurun dari atribut android:priority (dari 0 hingga 999). Setelah pemrosesan, penerima dapat meneruskan hasil ke penerima berikutnya melalui setResultExtras atau menghentikan rantai dengan memanggil abortBroadcast. Ini digunakan dalam skenario di mana urutan pemrosesan penting — misalnya, penerima SMS.
Android menghasilkan banyak Broadcast sistem: ACTION_BOOT_COMPLETED (boot perangkat), ACTION_BATTERY_LOW, ACTION_POWER_CONNECTED, CONNECTIVITY_ACTION, ACTION_PACKAGE_ADDED dan lainnya. Setiap Intent berisi data tambahan di Extras — tingkat baterai, jenis koneksi, nama paket.
| Jenis Broadcast | Urutan | abortBroadcast | Kinerja |
|---|---|---|---|
| Normal | Tidak dijamin | Tidak berfungsi | Tinggi (paralel) |
| Ordered | Berdasarkan prioritas | Berfungsi | Sedang (berurutan) |
| Sticky | Satu nilai | Tidak berlaku | Rendah (usang sejak API 21) |
Sticky Broadcast — tipe usang yang menyimpan nilai terakhir yang dikirim. Sebagai gantinya, gunakan LiveData, StateFlow, atau SharedPreferences bersama untuk menyimpan status terakhir.
Broadcast Receiver dapat didaftarkan dengan dua cara: statis melalui AndroidManifest.xml atau dinamis di kode melalui registerReceiver. Pilihan tergantung pada skenario: pendaftaran statis berfungsi bahkan jika aplikasi tidak berjalan, dinamis — hanya selama komponen pendaftar aktif.
Pendaftaran statis dideklarasikan di manifes dengan tag <receiver> di dalam <application>. Untuk setiap penerima, ditentukan kelas penangan dan filter Intent dengan tindakan yang harus dicegat. Sistem memuat penerima semacam itu saat Broadcast terjadi bahkan jika aplikasi tidak berjalan.
<!-- Static Broadcast Receiver registration in manifest -->
<receiver android:name=".BootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Pendaftaran dinamis dilakukan dengan metode registerReceiver di kode Activity, Service, atau Fragment. Penerima hidup hanya selama komponen yang mendaftarkannya hidup. Wajib memanggil unregisterReceiver di onPause atau onDestroy — jika tidak, akan terjadi kebocoran memori, dan sistem dapat menghentikan proses.
Untuk Ordered Broadcast, urutan pengiriman ditentukan oleh atribut android:priority. Penerima dengan prioritas lebih tinggi menerima Intent lebih awal. Jika setelah pemrosesan ia memanggil abortBroadcast, penerima dengan prioritas lebih rendah tidak akan menerima Intent. Untuk penerima statis, prioritas diatur dalam filter Intent di manifes.
Penerima dalam Ordered Broadcast dapat mentransfer data ke penerima berikutnya dalam rantai melalui setResultExtras atau setResultData. Ini memungkinkan pemrosesan pipeline: penerima pertama memperkaya Intent dengan data tambahan, penerima kedua menggunakannya, penerima ketiga menyelesaikan rantai. Metode getResultExtras membaca data yang ditransfer oleh penerima sebelumnya.
Untuk Normal Broadcast, urutan tidak dijamin, sehingga semua penerima menerima Intent asli tanpa perubahan. Jika Anda ingin penerima saling memengaruhi, gunakan sendOrderedBroadcast alih-alih sendBroadcast.
Android 8 (API 26, Oreo) memperkenalkan batasan signifikan pada Broadcast latar belakang. Sebagian besar Broadcast implisit — yang tidak ditujukan ke aplikasi tertentu — tidak lagi berfungsi dengan pendaftaran statis. Sistem memblokir penerima yang terdaftar di manifes untuk tindakan seperti CONNECTIVITY_ACTION atau ACTION_BATTERY_LOW.
Google menetapkan daftar Broadcast yang terus berfungsi dengan pendaftaran statis: BOOT_COMPLETED, TIME_TICK, Alarm, INSTANCE? (perubahan paket) — total sekitar sepuluh pengecualian. Semua Broadcast implisit lainnya sekarang memerlukan pendaftaran dinamis melalui Context.registerReceiver, yang hanya berfungsi saat aplikasi berada di latar depan.
Untuk tugas latar belakang yang sebelumnya diselesaikan melalui Broadcast Receiver, Android merekomendasikan WorkManager (tugas tertunda dengan jaminan eksekusi), JobScheduler (tugas periodik dengan mempertimbangkan status perangkat), dan NotificationListenerService (pemantauan notifikasi). Komponen-komponen ini berfungsi tanpa batasan Android 8 dan dioptimalkan untuk konsumsi daya.
Mari kita buat Broadcast Receiver untuk melacak koneksi jaringan. Penerima akan menerima Broadcast CONNECTIVITY_ACTION dan mencatat jenis koneksi. Untuk Android 8+, kita daftarkan secara dinamis, karena ini adalah Broadcast implisit yang dikecualikan dari pendaftaran statis.
// Broadcast Receiver untuk pelacakan status jaringan
class NetworkReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val network = cm.activeNetwork
val caps = cm.getNetworkCapabilities(network)
val connectionType = when {
caps?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true -> "WiFi"
caps?.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) == true -> "Cellular"
else -> "Disconnected"
}
Log.d("NetworkReceiver", "Jenis koneksi: $connectionType")
}
}
// Pendaftaran dinamis di Activity
class MainActivity : AppCompatActivity() {
private val networkReceiver = NetworkReceiver()
override fun onStart() {
super.onStart()
val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
registerReceiver(networkReceiver, filter)
}
override fun onStop() {
super.onStop()
unregisterReceiver(networkReceiver)
}
}
Wajib batalkan pendaftaran penerima di onStop — jika Activity masuk ke latar belakang tetapi penerima tetap terdaftar, sistem tidak dapat membebaskan sumber daya. Untuk Service, gunakan onDestroy. Di fragment, daftarkan penerima di onStart dan batalkan di onStop, mengikuti siklus hidup fragment.
Pertanyaan Umum
Broadcast Receiver — komponen Android untuk memproses pesan Broadcast sistem dan pengguna. Ia menerima Intent dalam metode onReceive, yang dijalankan di thread utama dan harus selesai dalam 10 detik. Untuk tugas panjang, gunakan WorkManager atau JobScheduler.
Normal Broadcast dikirim ke semua penerima secara asinkron dan paralel — urutan tidak dijamin, abortBroadcast tidak berfungsi. Ordered Broadcast dikirim secara berurutan berdasarkan prioritas, setiap penerima dapat menghentikan rantai atau mentransfer data melalui setResultExtras.
Pendaftaran statis (di manifes) memungkinkan penerima berfungsi bahkan jika aplikasi tidak berjalan. Pendaftaran dinamis (melalui registerReceiver) hanya berfungsi selama komponen pendaftar aktif. Sejak Android 8, banyak Broadcast implisit memerlukan pendaftaran dinamis.
Android 8 (API 26) melarang pendaftaran statis untuk sebagian besar Broadcast implisit, seperti CONNECTIVITY_ACTION atau ACTION_BATTERY_LOW. Pengecualian termasuk BOOT_COMPLETED, Alarm, waktu, dan beberapa lainnya. Untuk tugas latar belakang, gunakan WorkManager alih-alih Broadcast.
Gunakan LiveData, StateFlow, EventBus, atau LocalBroadcastManager untuk mentransfer data dari onReceive ke UI. Jangan mencoba memperbarui UI langsung dari onReceive — itu dijalankan di thread utama, tetapi penerima tidak menjamin bahwa Activity terlihat. LocalBroadcastManager adalah opsi usang untuk komunikasi internal.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga