>> Tecnologia Eletrônica >  >> Áudio Residencial >> Receptores

Android BroadcastReceiver: Tratamento Eventos Sistêmicos

O Que é BroadcastReceiver?

Um BroadcastReceiver é componente Android que escuta Intents broadcast sistema ou app-definidos e executa lógica breve em resposta. É mecanismo publish-subscribe do Android.

Fontes Broadcast

  • Eventos sistema: BOOT_COMPLETED, BATTERY_LOW, TIMEZONE_CHANGED, CONNECTIVITY_CHANGE, PACKAGE_INSTALLED
  • Hardware: Fone ouvido plug, botão câmera, eventos dock
  • Outros apps: Ações custom via sendBroadcast(), sendOrderedBroadcast()

Registro: Estático vs. Dinâmico

Estático (Manifest)Dinâmico (Context.registerReceiver)
Declarado no AndroidManifest.xmlRegistrado em código (Activity, Service, Application)
Sempre ativo (mesmo app não rodando)Ativo só enquanto contexto registrador vive
Recebe broadcasts implícitos + explícitosPode receber broadcasts sticky
Maior impacto bateria (acorda app)Menor impacto, lifecycle escopado
Obrigatório para BOOT_COMPLETEDPreferido para eventos UI-relacionados

Contrato onReceive()

  • Roda na main thread (a menos que goAsync() usado)
  • Deve completar em ~10 segundos (risco ANR)
  • Sem operações UI — inicie Activity/Service
  • Broadcasts ordenados: Pode chamar abortBroadcast(), passar resultado próximo receiver

Padrões Comuns


// Registro Manifest <receiver android:name=".BootReceiver" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> // Registro dinâmico (em Activity.onStart()) val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION) registerReceiver(networkReceiver, filter) // Em onStop() unregisterReceiver(networkReceiver) 

Alternativas Modernas (Android 8+)

  • JobScheduler / WorkManager: Execução diferida, garantida com constraints (carregando, rede, ocioso)
  • Foreground Service: Tarefas longas com notificação visível usuário
  • LiveData / Flow + Lifecycle: Updates UI reativos em vez broadcast spaghetti
  • Broadcasts restritos: Muitos broadcasts implícitos não mais entregues a receivers manifest (ex.: CONNECTIVITY_ACTION)

Melhores Práticas

  • Mantenha onReceive() mínimo — delegue para WorkManager/Service
  • Use goAsync() para trabalho ligeiramente mais longo (ainda < ~30s)
  • Defina android:exported explicitamente (obrigatório API 31+)
  • Valide action Intent e extras — não confie cegamente
  • Prefira registro dinâmico para eventos acoplados UI

Resumo

BroadcastReceiver é cola para notificação eventos cross-component, cross-app, sistema-para-app. Use para gatilhos breves; passe trabalho real para WorkManager ou Services.