Broadcast Receiver — Android komponenti bo'lib, tarmoq holatining o'zgarishi, batareya zaryad darajasi, SMS qabul qilish yoki ilova o'rnatish kabi tizim Broadcast xabarlarini tinglaydi va qayta ishlaydi. U hodisa yuz berganda operatsion tizim tomonidan ishga tushiriladi va vazifani asosiy oqimda yoki fon xizmati orqali bajaradi. Android Developer Guide, 2026 ma'lumotlariga ko'ra, Broadcast Receiver ilovaga ishga tushirilmagan bo'lsa ham global tizim hodisalariga reaksiya berish imkonini beradi, bu esa uni Android ekotizimida fon hodisalarini qayta ishlashning asosiy mexanizmiga aylantiradi.
Asosiy ma'lumotlar
Broadcast Receiver — operatsion tizim yoki boshqa ilovalar tomonidan tarqatiladigan Intent xabarlarini qabul qilish va qayta ishlash uchun mo'ljallangan Android komponenti. Activity va Service dan farqli o'laroq, Broadcast Receiver foydalanuvchi interfeysiga ega emas — uning vazifasi hodisa yuz berganda qisqa vazifani bajarishdir.
Broadcast Receiver Intent mexanizmi orqali ishlaydi. Tizim yoki ilova sendBroadcast yoki sendOrderedBroadcast orqali Intent yuboradi, operatsion tizim esa uni ro'yxatdan o'tgan qabul qiluvchilarga yetkazadi. Har bir qabul qiluvchi Intent-ni asosiy oqimda bajariladigan onReceive metodida oladi.
Android Compatibility Definition Document ga ko'ra, Broadcast Receiver onReceive-ni 10 soniya ichida tugatishi kerak — aks holda tizim uni osilgan deb hisoblaydi va jarayonni tugatadi. Uzoq muddatli fon vazifalari uchun qabul qiluvchidan ishga tushirilgan JobScheduler yoki WorkManager dan foydalaning.
Android ikkita asosiy Broadcast turini qo'llab-quvvatlaydi: Normal Broadcast va Ordered Broadcast. Farq yetkazib berish tartibi va qayta ishlash zanjirini uzish imkoniyatidadir. Bundan tashqari, Broadcastlar tizim (OS tomonidan yaratilgan) va foydalanuvchi (ilova tomonidan yaratilgan) ga bo'linadi.
Normal Broadcast barcha ro'yxatdan o'tgan qabul qiluvchilarga asinxron va kafolatlangan tartibsiz yetkaziladi. Tizim bunday Broadcastlarni parallel qayta ishlashi mumkin — har bir qabul qiluvchi Intent-ni o'z oqimida oladi. Normal Broadcastda abortBroadcast chaqiruvi samarasiz: boshqa qabul qiluvchilarga yetkazishni bekor qilib bo'lmaydi.
Ordered Broadcast ketma-ket yetkaziladi — har bir qabul qiluvchiga android:priority atributining kamayish tartibida (0 dan 999 gacha). Qayta ishlashdan so'ng, qabul qiluvchi setResultExtras orqali natijani keyingisiga uzatishi yoki abortBroadcast chaqiruvi bilan zanjirni uzishi mumkin. Bu qayta ishlash tartibi muhim bo'lgan stsenariylarda qo'llaniladi — masalan, SMS qabul qiluvchilar.
Android ko'plab tizim Broadcastlarini yaratadi: ACTION_BOOT_COMPLETED (qurilmaning yuklanishi), ACTION_BATTERY_LOW, ACTION_POWER_CONNECTED, CONNECTIVITY_ACTION, ACTION_PACKAGE_ADDED va boshqalar. Har bir Intent Extrasda qo'shimcha ma'lumotlarni o'z ichiga oladi — zaryad darajasi, ulanish turi, paket nomi.
| Broadcast turi | Tartib | abortBroadcast | Unumdorlik |
|---|---|---|---|
| Normal | Kafolatlanmagan | Ishlamaydi | Yuqori (parallel) |
| Ordered | Prioritet bo'yicha | Ishlaydi | O'rtacha (ketma-ket) |
| Sticky | Bitta qiymat | Qo'llanilmaydi | Past (API 21 dan eskirgan) |
Sticky Broadcast — oxirgi yuborilgan qiymatni saqlaydigan eskirgan tur. Buning o'rniga oxirgi holatni saqlash uchun LiveData, StateFlow yoki umumiy SharedPreferences dan foydalaning.
Broadcast Receiver ikki usulda ro'yxatdan o'tkazilishi mumkin: statik AndroidManifest.xml orqali yoki dinamik kodda registerReceiver orqali. Tanlov stsenariyga bog'liq: statik ro'yxatdan o'tish ilova ishga tushirilmagan bo'lsa ham ishlaydi, dinamik — faqat ro'yxatdan o'tkazuvchi komponent faol bo'lganda.
Statik ro'yxatdan o'tish manifestda <receiver> tegi bilan <application> ichida e'lon qilinadi. Har bir qabul qiluvchi uchun ishlov beruvchi sinf va ushlashi kerak bo'lgan Intent filtri ko'rsatiladi. Tizim Broadcast yuz berganda bunday qabul qiluvchilarni ilova ishga tushirilmagan bo'lsa ham yuklaydi.
<!-- 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>
Dinamik ro'yxatdan o'tish Activity, Service yoki Fragment kodida registerReceiver metodi orqali amalga oshiriladi. Qabul qiluvchi faqat uni ro'yxatdan o'tkazgan komponent yashaguncha ishlaydi. onPause yoki onDestroy da albatta unregisterReceiver chaqiring — aks holda xotira sizib ketadi va tizim jarayonni tugatishi mumkin.
Ordered Broadcast uchun yetkazib berish tartibi android:priority atributi bilan belgilanadi. Yuqori prioritetli qabul qiluvchi Intent-ni oldin oladi. Agar qayta ishlashdan so'ng abortBroadcast chaqirsa, past prioritetli qabul qiluvchilar Intent-ni olmaydi. Statik qabul qiluvchilar uchun prioritet manifestdagi Intent filtrida o'rnatiladi.
Ordered Broadcastdagi qabul qiluvchilar setResultExtras yoki setResultData orqali zanjirdagi keyingisiga ma'lumot uzatishi mumkin. Bu quvur liniyasini qayta ishlashni tashkil qilish imkonini beradi: birinchi qabul qiluvchi Intent-ni qo'shimcha ma'lumotlar bilan boyitadi, ikkinchi ulardan foydalanadi, uchinchi zanjirni tugatadi. getResultExtras metodi oldingi qabul qiluvchi tomonidan uzatilgan ma'lumotlarni o'qiydi.
Normal Broadcast uchun tartib kafolatlanmagan, shuning uchun barcha qabul qiluvchilar asl Intent-ni o'zgarishsiz oladi. Agar qabul qiluvchilar bir-biriga ta'sir qilishi kerak bo'lsa, sendBroadcast o'rniga sendOrderedBroadcast dan foydalaning.
Android 8 (API 26, Oreo) fon Broadcastlari bo'yicha muhim cheklovlar kiritdi. Ko'pchilik yashirin (implicit) Broadcastlar — muayyan ilovaga yo'naltirilmaganlar — endi statik ro'yxatdan o'tish bilan ishlamaydi. Tizim CONNECTIVITY_ACTION yoki ACTION_BATTERY_LOW kabi harakatlar uchun manifestda ro'yxatdan o'tgan qabul qiluvchilarni bloklaydi.
Google statik ro'yxatdan o'tish bilan ishlashda davom etadigan Broadcastlar ro'yxatini belgiladi: BOOT_COMPLETED, TIME_TICK, Alarm, INSTANCE? (paket o'zgarishlari) — jami o'nta istisno. Qolgan barcha yashirin Broadcastlar endi Context.registerReceiver orqali dinamik ro'yxatdan o'tishni talab qiladi, bu faqat ilova oldingi planda bo'lganda ishlaydi.
Ilgari Broadcast Receiver orqali hal qilinadigan fon vazifalari uchun Android WorkManager (bajarilish kafolati bilan kechiktirilgan vazifalar), JobScheduler (qurilma holatini hisobga olgan holda davriy vazifalar) va NotificationListenerService (bildirishnomalarni kuzatish) ni tavsiya qiladi. Ushbu komponentlar Android 8 cheklovlarisiz ishlaydi va energiya sarfi uchun optimallashtirilgan.
Tarmoq ulanishini kuzatish uchun Broadcast Receiver yaratishni ko'rib chiqaylik. Qabul qiluvchi CONNECTIVITY_ACTION Broadcast-ni qabul qiladi va ulanish turini qayd etadi. Android 8+ uchun uni dinamik ro'yxatdan o'tkazamiz, chunki bu statik ro'yxatdan o'tishdan chiqarilgan yashirin Broadcastdir.
// Broadcast Receiver tarmoq holatini kuzatish uchun
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", "Ulanish turi: $connectionType")
}
}
// Activity-da dinamik ro'yxatdan o'tish
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)
}
}
Qabul qiluvchining ro'yxatdan o'tishini albatta onStop da bekor qiling — agar Activity fonga o'tsa, lekin qabul qiluvchi ro'yxatdan o'tgan bo'lib qolsa, tizim resurslarni bo'shata olmaydi. Service uchun onDestroy dan foydalaning. Fragmentlarda qabul qiluvchini onStart da ro'yxatdan o'tkazing va onStop da bekor qiling, fragmentning hayot aylanishiga rioya qiling.
Tez-tez beriladigan savollar
Broadcast Receiver — tizim va foydalanuvchi Broadcast xabarlarini qayta ishlash uchun Android komponenti. U Intent-ni onReceive metodida oladi, bu asosiy oqimda bajariladi va 10 soniya ichida tugashi kerak. Uzoq muddatli vazifalar uchun WorkManager yoki JobScheduler dan foydalaning.
Normal Broadcast barcha qabul qiluvchilarga asinxron va parallel yetkaziladi — tartib kafolatlanmaydi, abortBroadcast ishlamaydi. Ordered Broadcast prioritet bo'yicha ketma-ket uzatiladi, har bir qabul qiluvchi zanjirni uzishi yoki setResultExtras orqali ma'lumot uzatishi mumkin.
Statik ro'yxatdan o'tish (manifestda) qabul qiluvchiga ilova ishga tushirilmagan bo'lsa ham ishlash imkonini beradi. Dinamik (registerReceiver orqali) faqat ro'yxatdan o'tkazuvchi komponent faol bo'lganda ishlaydi. Android 8 dan boshlab, ko'plab yashirin Broadcastlar dinamik ro'yxatdan o'tishni talab qiladi.
Android 8 (API 26) CONNECTIVITY_ACTION yoki ACTION_BATTERY_LOW kabi yashirin Broadcastlarning ko'pchiligi uchun statik ro'yxatdan o'tishni taqiqladi. Istisnolar BOOT_COMPLETED, Alarm, vaqt va boshqa bir nechtasini o'z ichiga oladi. Fon vazifalari uchun Broadcast o'rniga WorkManager dan foydalaning.
Ma'lumotlarni onReceive dan UI ga uzatish uchun LiveData, StateFlow, EventBus yoki LocalBroadcastManager dan foydalaning. UI-ni to'g'ridan-to'g'ri onReceive dan yangilashga urinmang — u asosiy oqimda bajariladi, ammo qabul qiluvchi Activity ko'rinishini kafolatlamaydi. LocalBroadcastManager ichki aloqa uchun eskirgan variantdir.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.