Broadcast Receiver : qu’est-ce que c’est, types de Broadcast et principe de fonctionnement

Auteur : IT Sectr Publié le : 2026-06-17 Temps de lecture : 7 min

Broadcast Receiver est un composant Android qui écoute et traite les messages Broadcast système, tels que les changements d’état du réseau, le niveau de batterie, la réception de SMS ou l’installation d’applications. Il est lancé par le système d’exploitation lors d’un événement et exécute sa tâche sur le thread principal ou via un service en arrière-plan. Selon le Android Developer Guide, 2026, Broadcast Receiver permet à une application de réagir aux événements système globaux même lorsqu’elle n’est pas en cours d’exécution, ce qui en fait un mécanisme clé pour le traitement d’événements en arrière-plan dans l’écosystème Android.

Points clés

  • Broadcast Receiver est un composant Android pour le traitement asynchrone des messages Broadcast système et personnalisés.
  • Ordered Broadcast est livré séquentiellement par priorité et peut être interrompu par tout récepteur.
  • Normal Broadcast est livré à tous les abonnés simultanément — l’ordre de traitement n’est pas garanti.
  • Enregistrement peut être statique (dans le manifeste) ou dynamique (dans le code via registerReceiver).
  • Restrictions Android 8+ interdit l’enregistrement statique pour de nombreux Broadcasts implicites, réduisant la charge en arrière-plan.

Qu’est-ce qu’un Broadcast Receiver ?

Broadcast Receiver est un composant Android conçu pour recevoir et traiter les messages Intent distribués par le système d’exploitation ou d’autres applications. Contrairement à Activity et Service, Broadcast Receiver n’a pas d’interface utilisateur — sa tâche est d’exécuter une action courte lorsqu’un événement se produit.

Broadcast Receiver fonctionne via le mécanisme Intent. Le système ou une application envoie un Intent via sendBroadcast ou sendOrderedBroadcast, et le système d’exploitation le livre aux récepteurs enregistrés. Chaque récepteur reçoit l’Intent dans la méthode onReceive, qui s’exécute sur le thread principal.

Selon le Android Compatibility Definition Document, un Broadcast Receiver doit terminer onReceive dans les 10 secondes — sinon le système le considère comme bloqué et termine le processus. Pour les tâches d’arrière-plan longues, utilisez JobScheduler ou WorkManager lancés depuis le récepteur.

Types de Broadcast sur Android

Android prend en charge deux principaux types de Broadcast : Normal Broadcast et Ordered Broadcast. La différence réside dans l’ordre de livraison et la capacité d’interrompre la chaîne de traitement. De plus, les Broadcasts sont divisés en système (générés par l’OS) et personnalisés (créés par l’application).

Normal Broadcast

Normal Broadcast est livré à tous les récepteurs enregistrés de manière asynchrone sans ordre garanti. Le système peut traiter ces Broadcasts en parallèle — chaque récepteur reçoit l’Intent dans son propre thread. Appeler abortBroadcast sur Normal Broadcast n’a aucun effet : la livraison aux autres récepteurs ne peut pas être annulée.

Ordered Broadcast

Ordered Broadcast est livré séquentiellement — à chaque récepteur dans l’ordre décroissant de l’attribut android:priority (de 0 à 999). Après traitement, le récepteur peut passer le résultat au suivant via setResultExtras ou interrompre la chaîne en appelant abortBroadcast. Ceci est utilisé dans les scénarios où l’ordre de traitement est important — par exemple, les récepteurs SMS.

Broadcasts système

Android génère de nombreux Broadcasts système : ACTION_BOOT_COMPLETED (démarrage de l’appareil), ACTION_BATTERY_LOW, ACTION_POWER_CONNECTED, CONNECTIVITY_ACTION, ACTION_PACKAGE_ADDED et autres. Chaque Intent contient des données supplémentaires dans Extras — niveau de batterie, type de connexion, nom du paquet.

Type de BroadcastOrdreabortBroadcastPerformances
NormalNon garantiNe fonctionne pasÉlevé (parallèle)
OrderedPar prioritéFonctionneMoyen (séquentiel)
StickyValeur uniqueNon applicableFaible (obsolète depuis API 21)

Sticky Broadcast est un type obsolète qui conservait la dernière valeur envoyée. À la place, utilisez LiveData, StateFlow ou des SharedPreferences partagées pour stocker le dernier état.

Enregistrement du Broadcast Receiver

Broadcast Receiver peut être enregistré de deux manières : statiquement via AndroidManifest.xml ou dynamiquement dans le code via registerReceiver. Le choix dépend du scénario : l’enregistrement statique fonctionne même si l’application n’est pas en cours d’exécution, l’enregistrement dynamique ne fonctionne que tant que le composant enregistreur est actif.

Enregistrement statique

L’enregistrement statique est déclaré dans le manifeste avec la balise <receiver> à l’intérieur de <application>. Pour chaque récepteur, la classe de gestion et un filtre Intent avec les actions à intercepter sont spécifiés. Le système charge ces récepteurs lors d’un Broadcast même si l’application n’est pas en cours d’exécution.

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>

Enregistrement dynamique

L’enregistrement dynamique est effectué à l’aide de la méthode registerReceiver dans le code d’Activity, Service ou Fragment. Le récepteur ne vit que tant que le composant qui l’a enregistré est actif. Appelez toujours unregisterReceiver dans onPause ou onDestroy — sinon une fuite de mémoire se produit et le système peut terminer le processus.

Priorité et ordre de traitement

Pour Ordered Broadcast, l’ordre de livraison est déterminé par l’attribut android:priority. Un récepteur avec une priorité plus élevée reçoit l’Intent en premier. S’il appelle abortBroadcast après traitement, les récepteurs de priorité inférieure ne recevront pas l’Intent. Pour les récepteurs statiques, la priorité est définie dans le filtre Intent du manifeste.

Transfert de données entre récepteurs

Les récepteurs dans Ordered Broadcast peuvent passer des données au suivant dans la chaîne via setResultExtras ou setResultData. Cela permet un traitement en pipeline : le premier récepteur enrichit l’Intent avec des données supplémentaires, le second les utilise, le troisième complète la chaîne. La méthode getResultExtras lit les données transmises par le récepteur précédent.

Pour Normal Broadcast, l’ordre n’est pas garanti, donc tous les récepteurs reçoivent l’Intent original inchangé. Si vous avez besoin que les récepteurs s’influencent mutuellement, utilisez sendOrderedBroadcast au lieu de sendBroadcast.

Restrictions dans Android 8 et versions ultérieures

Android 8 (API 26, Oreo) a introduit des restrictions significatives sur les Broadcasts en arrière-plan. La plupart des Broadcasts implicites — ceux non adressés à une application spécifique — ne fonctionnent plus avec l’enregistrement statique. Le système bloque les récepteurs enregistrés dans le manifeste pour des actions telles que CONNECTIVITY_ACTION ou ACTION_BATTERY_LOW.

Ce qui a changé

Google a fixé une liste de Broadcasts qui continuent de fonctionner avec l’enregistrement statique : BOOT_COMPLETED, TIME_TICK, Alarm et les changements de paquet — environ une douzaine d’exceptions au total. Tous les autres Broadcasts implicites nécessitent désormais un enregistrement dynamique via Context.registerReceiver, qui ne fonctionne que lorsque l’application est au premier plan.

Alternatives à Broadcast Receiver

Pour les tâches d’arrière-plan qui étaient auparavant traitées via Broadcast Receiver, Android recommande WorkManager (tâches différées avec garantie d’exécution), JobScheduler (tâches périodiques tenant compte de l’état de l’appareil) et NotificationListenerService (surveillance des notifications). Ces composants fonctionnent sans les restrictions d’Android 8 et sont optimisés pour la consommation d’énergie.

Exemple de Broadcast Receiver en Kotlin

Créons un Broadcast Receiver pour suivre la connectivité réseau. Le récepteur capturera le Broadcast CONNECTIVITY_ACTION et enregistrera le type de connexion. Pour Android 8+, nous l’enregistrerons dynamiquement car il s’agit d’un Broadcast implicite exclu de l’enregistrement statique.

kotlin
// Broadcast Receiver pour le suivi de l’état du réseau
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", "Type de connexion : $connectionType")
    }
}

// Enregistrement dynamique dans 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)
    }
}

Annulez toujours l’enregistrement du récepteur dans onStop — si l’Activity passe en arrière-plan mais que le récepteur reste enregistré, le système ne peut pas libérer les ressources. Pour Service, utilisez onDestroy. Dans les fragments, enregistrez le récepteur dans onStart et annulez l’enregistrement dans onStop, en suivant le cycle de vie du fragment.

Foire aux questions

Qu’est-ce qu’un Broadcast Receiver sur Android ?

Broadcast Receiver est un composant Android pour le traitement des messages Broadcast système et personnalisés. Il reçoit un Intent dans la méthode onReceive, qui s’exécute sur le thread principal, et doit se terminer dans les 10 secondes. Pour les tâches longues, utilisez WorkManager ou JobScheduler.

Quelle est la différence entre Normal Broadcast et Ordered Broadcast ?

Normal Broadcast est livré à tous les récepteurs de manière asynchrone et parallèle — l’ordre n’est pas garanti, abortBroadcast ne fonctionne pas. Ordered Broadcast est livré séquentiellement par priorité, chaque récepteur peut interrompre la chaîne ou passer des données au suivant via setResultExtras.

Quelle est la différence entre enregistrement statique et dynamique ?

L’enregistrement statique (dans le manifeste) permet au récepteur de fonctionner même si l’application n’est pas en cours d’exécution. L’enregistrement dynamique (via registerReceiver) ne fonctionne que tant que le composant enregistreur est actif. À partir d’Android 8, de nombreux Broadcasts implicites nécessitent un enregistrement dynamique.

Quelles restrictions ont été introduites dans Android 8 pour Broadcast Receiver ?

Android 8 (API 26) a interdit l’enregistrement statique pour la plupart des Broadcasts implicites, tels que CONNECTIVITY_ACTION ou ACTION_BATTERY_LOW. Les exceptions incluent BOOT_COMPLETED, Alarm, l’heure et quelques autres. Pour les tâches d’arrière-plan, utilisez WorkManager au lieu de Broadcast.

Comment transmettre des données de Broadcast Receiver à Activity ?

Utilisez LiveData, StateFlow, EventBus ou LocalBroadcastManager pour transmettre les données de onReceive à l’interface utilisateur. N’essayez pas de mettre à jour l’interface directement depuis onReceive — il s’exécute sur le thread principal, mais le récepteur ne garantit pas que l’Activity est visible. LocalBroadcastManager est une option obsolète pour la communication interne.

Résumé

  • Broadcast Receiver est un composant système Android pour recevoir et traiter les événements globaux via des messages Intent de l’OS ou d’autres applications.
  • Normal Broadcast est livré en parallèle sans garantie d’ordre ; Ordered Broadcast est livré séquentiellement par priorité avec possibilité d’interruption de la chaîne.
  • L’enregistrement statique dans le manifeste fonctionne pour les processus qui ne sont pas encore en cours d’exécution, mais il est restreint dans Android 8+ pour la plupart des Broadcasts implicites.
  • L’enregistrement dynamique via registerReceiver nécessite un appel obligatoire à unregisterReceiver pour éviter les fuites de mémoire.
  • System Broadcast inclut BOOT_COMPLETED, CONNECTIVITY_ACTION, BATTERY_LOW — chacun contient des données supplémentaires dans les Extras de l’Intent.
  • Le temps d’exécution de onReceive est limité à 10 secondes — pour les tâches longues, lancez WorkManager ou JobScheduler depuis le récepteur.
  • Alternatives à Broadcast Receiver dans Android 8+ : WorkManager pour les tâches d’arrière-plan, JobScheduler pour les tâches périodiques, NotificationListenerService pour la surveillance des notifications.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi