Broadcast Receiver: bu nədir, Broadcast növləri və iş prinsipi

Müəllif: IT Sectr Dərc olunub: 2026-06-17 Oxuma vaxtı: 7 dəq

Broadcast Receiver — Android komponentidir, sistem Broadcast mesajlarını dinləyir və emal edir, məsələn şəbəkə vəziyyətinin dəyişməsi, batareya doldurma səviyyəsi, SMS qəbulu və ya proqram quraşdırılması. O, hadisə baş verdikdə əməliyyat sistemi tərəfindən işə salınır və tapşırığı əsas axında və ya fon xidməti vasitəsilə yerinə yetirir. Android Developer Guide, 2026-ya görə, Broadcast Receiver proqrama işə salınmamış olsa belə qlobal sistem hadisələrinə reaksiya verməyə imkan verir ki, bu da onu Android ekosistemində fon hadisələrinin emalı üçün əsas mexanizm edir.

Əsas məqamlar

  • Broadcast Receiver — sistem və istifadəçi Broadcast mesajlarının asinxron emalı üçün Android komponenti.
  • Ordered Broadcast prioritetə görə ardıcıl ötürülür və istənilən qəbuledici tərəfindən dayandırıla bilər.
  • Normal Broadcast bütün abunəçilərə eyni vaxtda çatdırılır — emal sırası təmin edilmir.
  • Qeydiyyat statik (manifestdə) və dinamik (koddan registerReceiver ilə) ola bilər.
  • Məhdudiyyətlər Android 8+ bir çox gizli Broadcast üçün statik qeydiyyatı qadağan edir, bu da fon yükünü azaldır.

Broadcast Receiver nədir?

Broadcast Receiver — əməliyyat sistemi və ya digər proqramlar tərəfindən yayılan Intent mesajlarını qəbul etmək və emal etmək üçün nəzərdə tutulmuş Android komponentidir. Activity və Service-dən fərqli olaraq, Broadcast Receiver-in istifadəçi interfeysi yoxdur — onun vəzifəsi hadisə baş verdikdə qısa bir tapşırığı yerinə yetirməkdir.

Broadcast Receiver Intent mexanizmi vasitəsilə işləyir. Sistem və ya proqram sendBroadcast və ya sendOrderedBroadcast vasitəsilə Intent göndərir, əməliyyat sistemi isə onu qeydiyyatdan keçmiş qəbuledicilərə çatdırır. Hər bir qəbuledici onReceive metodunda Intent alır, bu metod əsas axında icra olunur.

Android Compatibility Definition Document-a görə, Broadcast Receiver onReceive-i 10 saniyə ərzində bitirməlidir — əks halda sistem onu donmuş hesab edir və prosesi dayandırır. Uzun müddətli fon tapşırıqları üçün qəbuledicidən işə salınan JobScheduler və ya WorkManager istifadə edin.

Androiddə Broadcast növləri

Android iki əsas Broadcast növünü dəstəkləyir: Normal Broadcast və Ordered Broadcast. Fərq çatdırılma sırası və emal zəncirini kəsmə imkanındadır. Bundan əlavə, Broadcast-lər sistem (OS tərəfindən yaradılan) və istifadəçi (proqram tərəfindən yaradılan) olaraq bölünür.

Normal Broadcast

Normal Broadcast bütün qeydiyyatdan keçmiş qəbuledicilərə asinxron və zəmanətli sıra olmadan çatdırılır. Sistem bu cür Broadcast-ləri paralel emal edə bilər — hər bir qəbuledici Intent-i öz axınında alır. Normal Broadcast-də abortBroadcast çağırışının effekti yoxdur: digər qəbuledicilərə çatdırılmanı ləğv etmək mümkün deyil.

Ordered Broadcast

Ordered Broadcast ardıcıl çatdırılır — hər bir qəbulediciyə android:priority atributunun azalma sırası ilə (0-dan 999-a qədər). Emaldan sonra qəbuledici setResultExtras vasitəsilə nəticəni növbəti qəbulediciyə ötürə və ya abortBroadcast çağırışı ilə zənciri kəsə bilər. Bu, emal sırasının vacib olduğu hallarda istifadə olunur — məsələn, SMS qəbulediciləri.

Sistem Broadcast-ləri

Android çox sayda sistem Broadcast-i yaradır: ACTION_BOOT_COMPLETED (cihazın yüklənməsi), ACTION_BATTERY_LOW, ACTION_POWER_CONNECTED, CONNECTIVITY_ACTION, ACTION_PACKAGE_ADDED və digərləri. Hər bir Intent Extras-da əlavə məlumatlar ehtiva edir — doldurma səviyyəsi, qoşulma növü, paket adı.

Broadcast növüSıraabortBroadcastPerformans
NormalZəmanətli deyilİşləmirYüksək (paralel)
OrderedPrioritetə görəİşləyirOrta (ardıcıl)
StickyTək dəyərTətbiq edilmirAşağı (API 21-dən etibarən köhnəlmiş)

Sticky Broadcast — son göndərilmiş dəyəri saxlayan köhnəlmiş tip. Bunun əvəzinə son vəziyyəti saxlamaq üçün LiveData, StateFlow və ya paylaşılan SharedPreferences istifadə edin.

Broadcast Receiver-in qeydiyyatı

Broadcast Receiver iki yolla qeydiyyatdan keçirilə bilər: statik olaraq AndroidManifest.xml vasitəsilə və ya dinamik olaraq koddan registerReceiver vasitəsilə. Seçim ssenaridən asılıdır: statik qeydiyyat proqram işə salınmamış olsa belə işləyir, dinamik qeydiyyat isə yalnız qeydiyyatdan keçirən komponent aktiv olduqda işləyir.

Statik qeydiyyat

Statik qeydiyyat manifestdə <receiver> teqi ilə <application> daxilində elan edilir. Hər bir qəbuledici üçün emalçı sinif və tutmalı olduğu Intent filtri göstərilir. Sistem Broadcast baş verdikdə bu cür qəbulediciləri proqram işə salınmamış olsa belə yükləyir.

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>

Dinamik qeydiyyat

Dinamik qeydiyyat Activity, Service və ya Fragment kodunda registerReceiver metodu ilə həyata keçirilir. Qəbuledici yalnız onu qeydiyyatdan keçirən komponent yaşadığı müddətdə fəaliyyət göstərir. onPause və ya onDestroy-də mütləq unregisterReceiver çağırın — əks halda yaddaş sızması baş verəcək və sistem prosesi dayandıra bilər.

Prioritet və emal sırası

Ordered Broadcast üçün çatdırılma sırası android:priority atributu ilə müəyyən edilir. Daha yüksək prioritetə malik qəbuledici Intent-i daha tez alır. Emaldan sonra abortBroadcast çağırarsa, aşağı prioritetli qəbuledicilər Intent-i almır. Statik qəbuledicilər üçün prioritet manifestdə Intent filtrində təyin edilir.

Qəbuledicilər arasında məlumat ötürülməsi

Ordered Broadcast-də qəbuledicilər setResultExtras və ya setResultData vasitəsilə zəncirdəki növbəti qəbulediciyə məlumat ötürə bilər. Bu, boru xətti emalını təşkil etməyə imkan verir: birinci qəbuledici Intent-i əlavə məlumatlarla zənginləşdirir, ikinci onlardan istifadə edir, üçüncü zənciri tamamlayır. getResultExtras metodu əvvəlki qəbuledici tərəfindən ötürülən məlumatları oxuyur.

Normal Broadcast üçün sıra təmin edilmir, ona görə bütün qəbuledicilər orijinal Intent-i dəyişiklik olmadan alır. Qəbuledicilərin bir-birinə təsir etməsi lazımdırsa, sendBroadcast əvəzinə sendOrderedBroadcast istifadə edin.

Android 8 və daha yenisində məhdudiyyətlər

Android 8 (API 26, Oreo) fon Broadcast-ləri ilə bağlı əhəmiyyətli məhdudiyyətlər tətbiq etdi. Gizli (implicit) Broadcast-lərin əksəriyyəti — konkret proqrama ünvanlanmayanlar — statik qeydiyyatla artıq işləmir. Sistem CONNECTIVITY_ACTION və ya ACTION_BATTERY_LOW kimi aksiyalar üçün manifestdə qeydiyyatdan keçmiş qəbulediciləri bloklayır.

Nə dəyişdi

Google statik qeydiyyatla işləməyə davam edən Broadcast-lərin siyahısını müəyyən etdi: BOOT_COMPLETED, TIME_TICK, Alarm, INSTANCE? (paket dəyişiklikləri) — cəmi onlarla istisna. Qalan bütün gizli Broadcast-lər indi yalnız proqram ön planda olduqda işləyən Context.registerReceiver vasitəsilə dinamik qeydiyyat tələb edir.

Broadcast Receiver-ə alternativlər

Əvvəllər Broadcast Receiver vasitəsilə həll edilən fon tapşırıqları üçün Android WorkManager (icra zəmanəti ilə gecikdirilmiş tapşırıqlar), JobScheduler (cihazın vəziyyəti nəzərə alınmaqla dövri tapşırıqlar) və NotificationListenerService (bildirişlərin monitorinqi) tövsiyə edir. Bu komponentlər Android 8 məhdudiyyətləri olmadan işləyir və enerji istehlakı üçün optimallaşdırılıb.

Kotlində Broadcast Receiver nümunəsi

Şəbəkə qoşulmasını izləmək üçün Broadcast Receiver yaradılmasını nəzərdən keçirək. Qəbuledici CONNECTIVITY_ACTION Broadcast-ni alacaq və qoşulma növünü qeyd edəcək. Android 8+ üçün onu dinamik qeydiyyatdan keçirəcəyik, çünki bu, statik qeydiyyatdan çıxarılmış gizli Broadcast-dir.

kotlin
// Şəbəkə vəziyyətini izləmək üçün Broadcast Receiver
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", "Qoşulma növü: $connectionType")
    }
}

// Activity-də dinamik qeydiyyat
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)
    }
}

Qəbuledicinin qeydiyyatını mütləq onStop-da ləğv edin — əgər Activity arxa plana keçərsə, lakin qəbuledici qeydiyyatda qalarsa, sistem resursları boşalda bilməz. Service üçün onDestroy istifadə edin. Fragmentlərdə qəbuledicini onStart-da qeydiyyatdan keçirin və onStop-da ləğv edin, fragmentin həyat dövrünə uyğun olaraq.

Tez-tez verilən suallar

Androiddə Broadcast Receiver nədir?

Broadcast Receiver — sistem və istifadəçi Broadcast mesajlarını emal etmək üçün Android komponentidir. O, Intent-i onReceive metodunda alır, bu metod əsas axında icra olunur və 10 saniyə ərzində bitməlidir. Uzun müddətli tapşırıqlar üçün WorkManager və ya JobScheduler istifadə edin.

Normal Broadcast Ordered Broadcast-dən nə ilə fərqlənir?

Normal Broadcast bütün qəbuledicilərə asinxron və paralel çatdırılır — sıra təmin edilmir, abortBroadcast işləmir. Ordered Broadcast prioritetə görə ardıcıl ötürülür, hər bir qəbuledici zənciri kəsə və ya setResultExtras vasitəsilə məlumat ötürə bilər.

Statik və dinamik qeydiyyat arasında nə fərq var?

Statik qeydiyyat (manifestdə) qəbulediciyə proqram işə salınmamış olsa belə işləməyə imkan verir. Dinamik (registerReceiver vasitəsilə) yalnız qeydiyyatdan keçirən komponent aktiv olduqda işləyir. Android 8-dən etibarən bir çox gizli Broadcast dinamik qeydiyyat tələb edir.

Android 8-də Broadcast Receiver üçün hansı məhdudiyyətlər yarandı?

Android 8 (API 26) CONNECTIVITY_ACTION və ya ACTION_BATTERY_LOW kimi gizli Broadcast-lərin əksəriyyəti üçün statik qeydiyyatı qadağan etdi. İstisnalara BOOT_COMPLETED, Alarm, vaxt və bəzi digərləri daxildir. Fon tapşırıqları üçün Broadcast əvəzinə WorkManager istifadə edin.

Broadcast Receiver-dən Activity-ə məlumat necə ötürülür?

onReceive-dən UI-ə məlumat ötürmək üçün LiveData, StateFlow, EventBus və ya LocalBroadcastManager istifadə edin. Birbaşa onReceive-dən UI-i yeniləməyə çalışmayın — o, əsas axında icra olunur, lakin qəbuledici Activity-nin görünməsini təmin etmir. LocalBroadcastManager daxili kommunikasiya üçün köhnəlmiş seçimdir.

Xülasə

  • Broadcast Receiver — OS və ya digər proqramlardan Intent mesajları vasitəsilə qlobal hadisələri qəbul etmək və emal etmək üçün sistem Android komponenti.
  • Normal Broadcast sıra zəmanəti olmadan paralel çatdırılır; Ordered Broadcast prioritetə görə ardıcıl ötürülür və zənciri kəsmək imkanı var.
  • Manifestdə statik qeydiyyat hələ işə salınmamış proseslər üçün işləyir, lakin Android 8+-da gizli Broadcast-lərin əksəriyyəti üçün məhdudlaşdırılıb.
  • registerReceiver vasitəsilə dinamik qeydiyyat yaddaş sızmasının qarşısını almaq üçün məcburi unregisterReceiver çağırışı tələb edir.
  • Sistem Broadcast-ləri BOOT_COMPLETED, CONNECTIVITY_ACTION, BATTERY_LOW daxildir — hər biri Intent Extras-da əlavə məlumatlar ehtiva edir.
  • onReceive-in icra müddəti 10 saniyə ilə məhdudlaşdırılıb — uzun müddətli tapşırıqlar üçün qəbuledicidən WorkManager və ya JobScheduler işə salın.
  • Alternativlər Android 8+-da Broadcast Receiver üçün: fon tapşırıqları üçün WorkManager, dövri tapşırıqlar üçün JobScheduler, bildiriş monitorinqi üçün NotificationListenerService.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun