Broadcast Receiver: nedir, Broadcast türleri ve çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-06-17 Okuma süresi: 7 dk

Broadcast Receiver, ağ durumu değişiklikleri, pil seviyesi, SMS alma veya uygulama yükleme gibi sistem Broadcast mesajlarını dinleyen ve işleyen bir Android bileşenidir. Bir olay meydana geldiğinde işletim sistemi tarafından başlatılır ve görevini ana iplikte veya bir arka plan hizmeti aracılığıyla yürütür. Android Developer Guide, 2026’ya göre Broadcast Receiver, bir uygulamanın çalışmasa bile küresel sistem olaylarına tepki vermesini sağlar ve bu da onu Android ekosisteminde arka plan olay işleme için anahtar bir mekanizma haline getirir.

Önemli Noktalar

  • Broadcast Receiver, sistem ve özel Broadcast mesajlarının eşzamansız işlenmesi için bir Android bileşenidir.
  • Ordered Broadcast, önceliğe göre sırayla teslim edilir ve herhangi bir alıcı tarafından kesintiye uğratılabilir.
  • Normal Broadcast, tüm abonelere aynı anda teslim edilir — işleme sırası garanti edilmez.
  • Kayıt, statik (manifestoda) veya dinamik (kod içinde registerReceiver aracılığıyla) olabilir.
  • Kısıtlamalar Android 8+, birçok örtük Broadcast için statik kaydı yasaklayarak arka plan yükünü azaltır.

Broadcast Receiver Nedir?

Broadcast Receiver, işletim sistemi veya diğer uygulamalar tarafından dağıtılan Intent mesajlarını almak ve işlemek için tasarlanmış bir Android bileşenidir. Activity ve Service’in aksine, Broadcast Receiver’ın kullanıcı arayüzü yoktur — görevi bir olay meydana geldiğinde kısa bir eylem gerçekleştirmektir.

Broadcast Receiver, Intent mekanizması aracılığıyla çalışır. Sistem veya bir uygulama, sendBroadcast veya sendOrderedBroadcast aracılığıyla bir Intent gönderir ve işletim sistemi bunu kayıtlı alıcılara iletir. Her alıcı, ana iplikte yürütülen onReceive yönteminde Intent’i alır.

Android Compatibility Definition Document’a göre, bir Broadcast Receiver onReceive’i 10 saniye içinde tamamlamalıdır — aksi takdirde sistem onu donmuş olarak kabul eder ve işlemi sonlandırır. Uzun süreli arka plan görevleri için, alıcıdan JobScheduler veya WorkManager başlatın.

Android’de Broadcast Türleri

Android iki ana Broadcast türünü destekler: Normal Broadcast ve Ordered Broadcast. Fark, teslimat sırası ve işleme zincirini kesintiye uğratma yeteneğinde yatar. Ayrıca, Broadcast’ler sistem (OS tarafından üretilen) ve özel (uygulama tarafından oluşturulan) olarak ikiye ayrılır.

Normal Broadcast

Normal Broadcast, garantili sıra olmadan tüm kayıtlı alıcılara eşzamansız olarak teslim edilir. Sistem bu Broadcast’leri paralel olarak işleyebilir — her alıcı Intent’i kendi ipliğinde alır. Normal Broadcast’te abortBroadcast çağırmanın hiçbir etkisi yoktur: diğer alıcılara teslimat iptal edilemez.

Ordered Broadcast

Ordered Broadcast sırayla teslim edilir — her alıcıya android:priority özelliğinin azalan sırasına göre (0’dan 999’a). İşlemeden sonra, alıcı setResultExtras aracılığıyla sonucu bir sonrakine iletebilir veya abortBroadcast çağırarak zinciri kesebilir. Bu, işleme sırasının önemli olduğu senaryolarda kullanılır — örneğin SMS alıcıları.

Sistem Broadcast’leri

Android birçok sistem Broadcast’i üretir: ACTION_BOOT_COMPLETED (cihaz açılışı), ACTION_BATTERY_LOW, ACTION_POWER_CONNECTED, CONNECTIVITY_ACTION, ACTION_PACKAGE_ADDED ve diğerleri. Her Intent, Extras’ta ek veriler içerir — pil seviyesi, bağlantı türü, paket adı.

Broadcast TürüSıraabortBroadcastPerformans
NormalGarantili değilÇalışmazYüksek (paralel)
OrderedÖnceliğe göreÇalışırOrta (sıralı)
StickyTek değerUygulanamazDüşük (API 21’den itibaren kullanımdan kaldırıldı)

Sticky Broadcast, gönderilen son değeri saklayan kullanımdan kaldırılmış bir türdür. Bunun yerine, son durumu saklamak için LiveData, StateFlow veya paylaşılan SharedPreferences kullanın.

Broadcast Receiver Kaydı

Broadcast Receiver iki şekilde kaydedilebilir: statik olarak AndroidManifest.xml aracılığıyla veya dinamik olarak kod içinde registerReceiver aracılığıyla. Seçim senaryoya bağlıdır: statik kayıt, uygulama çalışmasa bile çalışır; dinamik kayıt, yalnızca kaydeden bileşen aktif olduğu sürece çalışır.

Statik Kayıt

Statik kayıt, manifestoda <receiver> etiketiyle <application> içinde bildirilir. Her alıcı için, işleyici sınıfı ve kesilecek eylemleri içeren bir Intent filtresi belirtilir. Sistem, uygulama çalışmasa bile bir Broadcast oluştuğunda bu alıcıları yükler.

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 Kayıt

Dinamik kayıt, Activity, Service veya Fragment kodunda registerReceiver yöntemi kullanılarak gerçekleştirilir. Alıcı, yalnızca onu kaydeden bileşen canlı olduğu sürece yaşar. onPause veya onDestroy’da her zaman unregisterReceiver çağırın — aksi takdirde bellek sızıntısı oluşur ve sistem işlemi sonlandırabilir.

Öncelik ve İşleme Sırası

Ordered Broadcast için teslimat sırası, android:priority özelliği tarafından belirlenir. Daha yüksek önceliğe sahip bir alıcı, Intent’i ilk önce alır. İşlemeden sonra abortBroadcast çağırırsa, daha düşük öncelikli alıcılar Intent’i almaz. Statik alıcılar için öncelik, manifestodaki Intent filtresinde ayarlanır.

Alıcılar Arasında Veri Aktarımı

Ordered Broadcast’teki alıcılar, setResultExtras veya setResultData aracılığıyla zincirdeki bir sonrakine veri iletebilir. Bu, ardışık işlem hattına olanak tanır: ilk alıcı Intent’i ek verilerle zenginleştirir, ikincisi bunları kullanır, üçüncüsü zinciri tamamlar. getResultExtras yöntemi, önceki alıcı tarafından iletilen verileri okur.

Normal Broadcast için sıra garanti edilmez, bu nedenle tüm alıcılar değiştirilmemiş orijinal Intent’i alır. Alıcıların birbirini etkilemesi gerekiyorsa, sendBroadcast yerine sendOrderedBroadcast kullanın.

Android 8 ve Sonrasında Kısıtlamalar

Android 8 (API 26, Oreo), arka plan Broadcast’leri üzerinde önemli kısıtlamalar getirdi. Örtük Broadcast’lerin çoğu — belirli bir uygulamaya yönlendirilmemiş olanlar — artık statik kayıtla çalışmaz. Sistem, CONNECTIVITY_ACTION veya ACTION_BATTERY_LOW gibi eylemler için manifestoda kayıtlı alıcıları engeller.

Ne Değişti?

Google, statik kayıtla çalışmaya devam eden Broadcast’lerin bir listesini belirledi: BOOT_COMPLETED, TIME_TICK, Alarm ve paket değişiklikleri — toplamda yaklaşık bir düzine istisna. Diğer tüm örtük Broadcast’ler artık yalnızca uygulama ön plandayken çalışan Context.registerReceiver aracılığıyla dinamik kayıt gerektirir.

Broadcast Receiver’a Alternatifler

Daha önce Broadcast Receiver aracılığıyla yönetilen arka plan görevleri için Android, WorkManager (yürütme garantili ertelenmiş görevler), JobScheduler (cihaz durumunu dikkate alan periyodik görevler) ve NotificationListenerService (bildirim izleme) önerir. Bu bileşenler Android 8 kısıtlamaları olmadan çalışır ve güç tüketimi için optimize edilmiştir.

Kotlin’de Broadcast Receiver Örneği

Ağ bağlantısını izlemek için bir Broadcast Receiver oluşturalım. Alıcı, CONNECTIVITY_ACTION Broadcast’ini yakalayacak ve bağlantı türünü günlüğe kaydedecektir. Android 8+ için, statik kayıttan hariç tutulan örtük bir Broadcast olduğundan dinamik olarak kaydedeceğiz.

kotlin
// Ağ durumu izleme için 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", "Bağlantı türü: $connectionType")
    }
}

// Activity’de dinamik kayıt
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)
    }
}

Alıcının kaydını her zaman onStop’ta iptal edin — Activity arka plana giderse ancak alıcı kayıtlı kalırsa, sistem kaynakları serbest bırakamaz. Service için onDestroy kullanın. Fragment’lerde, fragment yaşam döngüsünü izleyerek onStart’ta alıcıyı kaydedin ve onStop’ta kaydı iptal edin.

Sıkça Sorulan Sorular

Android’de Broadcast Receiver Nedir?

Broadcast Receiver, sistem ve özel Broadcast mesajlarını işlemek için bir Android bileşenidir. onReceive yönteminde bir Intent alır, ana iplikte çalışır ve 10 saniye içinde tamamlanmalıdır. Uzun süreli görevler için WorkManager veya JobScheduler kullanın.

Normal Broadcast ile Ordered Broadcast arasındaki fark nedir?

Normal Broadcast, tüm alıcılara eşzamansız ve paralel olarak teslim edilir — sıra garanti edilmez, abortBroadcast çalışmaz. Ordered Broadcast, önceliğe göre sırayla teslim edilir, her alıcı zinciri kesebilir veya setResultExtras aracılığıyla bir sonrakine veri iletebilir.

Statik ve dinamik kayıt arasındaki fark nedir?

Statik kayıt (manifestoda), uygulama çalışmasa bile alıcının çalışmasına izin verir. Dinamik kayıt (registerReceiver aracılığıyla) yalnızca kaydeden bileşen aktif olduğu sürece çalışır. Android 8’den başlayarak, birçok örtük Broadcast dinamik kayıt gerektirir.

Android 8’de Broadcast Receiver için hangi kısıtlamalar getirildi?

Android 8 (API 26), CONNECTIVITY_ACTION veya ACTION_BATTERY_LOW gibi örtük Broadcast’lerin çoğu için statik kaydı yasakladı. İstisnalar arasında BOOT_COMPLETED, Alarm, saat ve diğer birkaçı bulunur. Arka plan görevleri için Broadcast yerine WorkManager kullanın.

Broadcast Receiver’dan Activity’ye veri nasıl aktarılır?

onReceive’den kullanıcı arayüzüne veri aktarmak için LiveData, StateFlow, EventBus veya LocalBroadcastManager kullanın. onReceive’den doğrudan arayüzü güncellemeye çalışmayın — ana iplikte çalışır, ancak alıcı Activity’nin görünür olduğunu garanti etmez. LocalBroadcastManager, dahili iletişim için kullanımdan kaldırılmış bir seçenektir.

Özet

  • Broadcast Receiver, OS veya diğer uygulamalardan Intent mesajları aracılığıyla küresel olayları almak ve işlemek için bir sistem Android bileşenidir.
  • Normal Broadcast sıra garantisi olmadan paralel olarak teslim edilir; Ordered Broadcast, zinciri kesme yeteneğiyle önceliğe göre sırayla teslim edilir.
  • Manifestodaki statik kayıt henüz çalışmayan işlemler için çalışır, ancak Android 8+’da çoğu örtük Broadcast için kısıtlanmıştır.
  • registerReceiver aracılığıyla dinamik kayıt, bellek sızıntısını önlemek için unregisterReceiver çağrısını zorunlu kılar.
  • Sistem Broadcast’leri BOOT_COMPLETED, CONNECTIVITY_ACTION, BATTERY_LOW içerir — her biri Intent Extras’ında ek veriler içerir.
  • onReceive yürütme süresi 10 saniye ile sınırlıdır — uzun görevler için alıcıdan WorkManager veya JobScheduler başlatın.
  • Android 8+’da Broadcast Receiver’a Alternatifler: arka plan görevleri için WorkManager, periyodik görevler için JobScheduler, bildirim izleme için NotificationListenerService.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun