Broadcast Receiver: apa itu, jenis Broadcast dan prinsip kerja

Penulis: IT Sectr Diterbitkan: 2026-06-17 Waktu membaca: 7 mnt

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 — komponen Android untuk pemrosesan asinkron pesan Broadcast sistem dan pengguna.
  • Ordered Broadcast dikirim secara berurutan berdasarkan prioritas dan dapat dihentikan oleh penerima mana pun.
  • Normal Broadcast dikirim ke semua pelanggan secara bersamaan — urutan pemrosesan tidak dijamin.
  • Pendaftaran bisa statis (di manifes) dan dinamis (di kode melalui registerReceiver).
  • Batasan Android 8+ melarang pendaftaran statis untuk banyak Broadcast implisit, yang mengurangi beban latar belakang.

Apa itu Broadcast Receiver?

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.

Jenis Broadcast di Android

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

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

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.

Broadcast Sistem

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 BroadcastUrutanabortBroadcastKinerja
NormalTidak dijaminTidak berfungsiTinggi (paralel)
OrderedBerdasarkan prioritasBerfungsiSedang (berurutan)
StickySatu nilaiTidak berlakuRendah (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.

Pendaftaran Broadcast Receiver

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

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.

xml
<!-- 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

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.

Prioritas dan Urutan Pemrosesan

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.

Mentransfer Data Antar Penerima

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.

Batasan di Android 8 dan Lebih Baru

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.

Apa yang Berubah

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.

Alternatif untuk Broadcast Receiver

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.

Contoh Broadcast Receiver di Kotlin

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.

kotlin
// 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

Apa itu Broadcast Receiver di Android?

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.

Apa perbedaan antara Normal Broadcast dan Ordered Broadcast?

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.

Apa perbedaan antara pendaftaran statis dan dinamis?

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.

Batasan apa yang muncul di Android 8 untuk Broadcast Receiver?

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.

Bagaimana cara mentransfer data dari Broadcast Receiver ke Activity?

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

  • Broadcast Receiver — komponen sistem Android untuk menerima dan memproses peristiwa global melalui pesan Intent dari OS atau aplikasi lain.
  • Normal Broadcast dikirim secara paralel tanpa jaminan urutan; Ordered Broadcast dikirim secara berurutan berdasarkan prioritas dengan kemampuan menghentikan rantai.
  • Pendaftaran statis di manifes berfungsi untuk proses yang belum berjalan, tetapi dibatasi di Android 8+ untuk sebagian besar Broadcast implisit.
  • Pendaftaran dinamis melalui registerReceiver memerlukan pemanggilan wajib unregisterReceiver untuk mencegah kebocoran memori.
  • Broadcast sistem mencakup BOOT_COMPLETED, CONNECTIVITY_ACTION, BATTERY_LOW — masing-masing berisi data tambahan di Extras Intent.
  • Waktu eksekusi onReceive dibatasi hingga 10 detik — untuk tugas panjang, jalankan WorkManager atau JobScheduler dari penerima.
  • Alternatif untuk Broadcast Receiver di Android 8+: WorkManager untuk tugas latar belakang, JobScheduler untuk tugas periodik, NotificationListenerService untuk pemantauan notifikasi.

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.

Diskusikan proyek

Baca juga