>> Technologie Électronique >  >> Audio pour la maison >> Récepteurs

Android BroadcastReceiver : gestion événements système

Qu'est-ce qu'un BroadcastReceiver ?

Un BroadcastReceiver est un composant Android qui écoute des Intents broadcast système ou app-définis et exécute une logique brève en réponse. C'est le mécanisme publish-subscribe d'Android.

Sources de broadcast

  • Événements système : BOOT_COMPLETED, BATTERY_LOW, TIMEZONE_CHANGED, CONNECTIVITY_CHANGE, PACKAGE_INSTALLED
  • Matériel : Branchement casque, bouton camera, événements dock
  • Autres apps : Actions custom via sendBroadcast(), sendOrderedBroadcast()

Enregistrement : Statique vs Dynamique

Statique (Manifest)Dynamique (Context.registerReceiver)
Déclaré dans AndroidManifest.xmlEnregistré dans code (Activity, Service, Application)
Toujours actif (même app pas lancé)Actif seulement tant que contexte enregistreur vit
Reçoit broadcasts implicites + explicitesPeut recevoir broadcasts sticky
Impact batterie plus fort (réveille app)Impact moindre, cycle de vie scopé
Requis pour BOOT_COMPLETEDPréféré pour événements UI

Le contrat onReceive()

  • S'exécute sur thread principal (sauf goAsync() utilisé)
  • Doit finir en ~10 secondes (risque ANR)
  • Pas d'opérations UI — lancez Activity/Service à la place
  • Broadcasts ordonnés : Peut appeler abortBroadcast(), passer résultat au suivant

Patterns courants

// Enregistrement Manifest <receiver android:name=".BootReceiver" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> // Enregistrement dynamique (dans Activity.onStart()) val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION) registerReceiver(networkReceiver, filter) // Dans onStop() unregisterReceiver(networkReceiver) 

Alternatives modernes (Android 8+)

  • JobScheduler / WorkManager : Exécution différée, garantie avec contraintes (charge, réseau, idle)
  • Foreground Service : Tâches longues avec notification visible utilisateur
  • LiveData / Flow + Lifecycle : Mises à jour UI réactives au lieu de spaghetti broadcasts
  • Broadcasts restreints : Beaucoup broadcasts implicites plus livrés aux receivers Manifest (ex: CONNECTIVITY_ACTION)

Bonnes pratiques

  • Gardez onReceive() minimal — déléguez à WorkManager/Service
  • Utilisez goAsync() pour travail légèrement plus long (encore < ~30s)
  • Définissez android:exported explicitement (requis API 31+)
  • Validez action Intent et extras — ne faites pas confiance aveuglément
  • Préférez enregistrement dynamique pour événements couplés UI

Résumé

BroadcastReceiver est la colle pour notification événements cross-composant, cross-app, et système-vers-app. Utilisez-le pour déclencheurs brefs ; confiez le vrai travail à WorkManager ou Services.

Récepteurs