Broadcast Receiver: qué es, tipos de Broadcast y principio de funcionamiento

Autor: IT Sectr Publicado: 2026-06-17 Tiempo de lectura: 7 min

Broadcast Receiver es un componente de Android que escucha y procesa mensajes Broadcast del sistema, como cambios en el estado de la red, nivel de batería, recepción de SMS o instalación de aplicaciones. El sistema operativo lo inicia cuando ocurre un evento y ejecuta su tarea en el hilo principal o mediante un servicio en segundo plano. Según la Android Developer Guide, 2026, Broadcast Receiver permite que una aplicación reaccione a eventos globales del sistema incluso cuando no está ejecutándose, lo que lo convierte en un mecanismo clave para el procesamiento de eventos en segundo plano en el ecosistema Android.

Puntos clave

  • Broadcast Receiver es un componente de Android para el procesamiento asíncrono de mensajes Broadcast del sistema y personalizados.
  • Ordered Broadcast se entrega secuencialmente por prioridad y puede ser interrumpido por cualquier receptor.
  • Normal Broadcast se entrega a todos los suscriptores simultáneamente — el orden de procesamiento no está garantizado.
  • Registro puede ser estático (en el manifiesto) o dinámico (en código mediante registerReceiver).
  • Restricciones Android 8+ prohíen el registro estático para muchos Broadcast implícitos, reduciendo la carga en segundo plano.

¿Qué es un Broadcast Receiver?

Broadcast Receiver es un componente de Android diseñado para recibir y procesar mensajes Intent distribuidos por el sistema operativo u otras aplicaciones. A diferencia de Activity y Service, Broadcast Receiver no tiene interfaz de usuario — su tarea es ejecutar una acción breve cuando ocurre un evento.

Broadcast Receiver funciona a través del mecanismo Intent. El sistema o una aplicación envía un Intent mediante sendBroadcast o sendOrderedBroadcast, y el sistema operativo lo entrega a los receptores registrados. Cada receptor recibe el Intent en el método onReceive, que se ejecuta en el hilo principal.

Según el Android Compatibility Definition Document, un Broadcast Receiver debe completar onReceive en menos de 10 segundos — de lo contrario, el sistema lo considera bloqueado y finaliza el proceso. Para tareas prolongadas en segundo plano, use JobScheduler o WorkManager iniciados desde el receptor.

Tipos de Broadcast en Android

Android admite dos tipos principales de Broadcast: Normal Broadcast y Ordered Broadcast. La diferencia radica en el orden de entrega y la capacidad de interrumpir la cadena de procesamiento. Además, los Broadcast se dividen en del sistema (generados por el SO) y personalizados (creados por la aplicación).

Normal Broadcast

Normal Broadcast se entrega a todos los receptores registrados de forma asíncrona sin orden garantizado. El sistema puede procesar estos Broadcast en paralelo — cada receptor recibe el Intent en su propio hilo. Llamar a abortBroadcast en Normal Broadcast no tiene efecto: la entrega a otros receptores no se puede cancelar.

Ordered Broadcast

Ordered Broadcast se entrega secuencialmente — a cada receptor en orden descendente del atributo android:priority (de 0 a 999). Después del procesamiento, el receptor puede pasar el resultado al siguiente mediante setResultExtras o interrumpir la cadena llamando a abortBroadcast. Esto se utiliza en escenarios donde el orden de procesamiento es importante, como en los receptores de SMS.

Broadcast del sistema

Android genera muchos Broadcast del sistema: ACTION_BOOT_COMPLETED (inicio del dispositivo), ACTION_BATTERY_LOW, ACTION_POWER_CONNECTED, CONNECTIVITY_ACTION, ACTION_PACKAGE_ADDED y otros. Cada Intent contiene datos adicionales en Extras — nivel de batería, tipo de conexión, nombre del paquete.

Tipo de BroadcastOrdenabortBroadcastRendimiento
NormalNo garantizadoNo funcionaAlto (paralelo)
OrderedPor prioridadFuncionaMedio (secuencial)
StickyValor únicoNo aplicaBajo (obsoleto desde API 21)

Sticky Broadcast es un tipo obsoleto que conservaba el último valor enviado. En su lugar, use LiveData, StateFlow o SharedPreferences compartidas para almacenar el último estado.

Registro de Broadcast Receiver

Broadcast Receiver se puede registrar de dos formas: estáticamente mediante AndroidManifest.xml o dinámicamente en código mediante registerReceiver. La elección depende del escenario: el registro estático funciona incluso si la aplicación no se está ejecutando, el registro dinámico solo funciona mientras el componente que lo registra esté activo.

Registro estático

El registro estático se declara en el manifiesto con la etiqueta <receiver> dentro de <application>. Para cada receptor, se especifican la clase de manejo y un filtro Intent con las acciones a interceptar. El sistema carga estos receptores cuando ocurre un Broadcast incluso si la aplicación no se está ejecutando.

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>

Registro dinámico

El registro dinámico se realiza mediante el método registerReceiver en código de Activity, Service o Fragment. El receptor vive solo mientras el componente que lo registró esté activo. Siempre llame a unregisterReceiver en onPause o onDestroy — de lo contrario, se produce una fuga de memoria y el sistema puede finalizar el proceso.

Prioridad y orden de procesamiento

Para Ordered Broadcast, el orden de entrega se determina mediante el atributo android:priority. Un receptor con mayor prioridad recibe el Intent primero. Si después del procesamiento llama a abortBroadcast, los receptores con menor prioridad no recibirán el Intent. Para receptores estáticos, la prioridad se establece en el filtro Intent del manifiesto.

Transferencia de datos entre receptores

Los receptores en Ordered Broadcast pueden pasar datos al siguiente en la cadena mediante setResultExtras o setResultData. Esto permite el procesamiento en tubería: el primer receptor enriquece el Intent con datos adicionales, el segundo los usa, el tercero completa la cadena. El método getResultExtras lee los datos pasados por el receptor anterior.

Para Normal Broadcast, el orden no está garantizado, por lo que todos los receptores reciben el Intent original sin cambios. Si necesita que los receptores se afecten entre sí, use sendOrderedBroadcast en lugar de sendBroadcast.

Restricciones en Android 8 y versiones posteriores

Android 8 (API 26, Oreo) introdujo restricciones significativas en los Broadcast en segundo plano. La mayoría de los Broadcast implícitos — aquellos no dirigidos a una aplicación específica — ya no funcionan con registro estático. El sistema bloquea los receptores registrados en el manifiesto para acciones como CONNECTIVITY_ACTION o ACTION_BATTERY_LOW.

Qué cambió

Google ha fijado una lista de Broadcast que continúan funcionando con registro estático: BOOT_COMPLETED, TIME_TICK, Alarm y cambios de paquete — aproximadamente una docena de excepciones en total. Todos los demás Broadcast implícitos ahora requieren registro dinámico mediante Context.registerReceiver, que solo funciona cuando la aplicación está en primer plano.

Alternativas a Broadcast Receiver

Para tareas en segundo plano que antes se manejaban mediante Broadcast Receiver, Android recomienda WorkManager (tareas diferidas con garantía de ejecución), JobScheduler (tareas periódicas considerando el estado del dispositivo) y NotificationListenerService (monitoreo de notificaciones). Estos componentes funcionan sin las restricciones de Android 8 y están optimizados para el consumo de energía.

Ejemplo de Broadcast Receiver en Kotlin

Creemos un Broadcast Receiver para rastrear la conectividad de red. El receptor capturará el Broadcast CONNECTIVITY_ACTION y registrará el tipo de conexión. Para Android 8+, lo registraremos dinámicamente ya que es un Broadcast implícito excluido del registro estático.

kotlin
// Broadcast Receiver para seguimiento del estado de la red
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", "Tipo de conexión: $connectionType")
    }
}

// Registro dinámico en 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)
    }
}

Siempre anule el registro del receptor en onStop — si la Activity pasa a segundo plano pero el receptor permanece registrado, el sistema no puede liberar recursos. Para Service, use onDestroy. En fragmentos, registre el receptor en onStart y anúle el registro en onStop, siguiendo el ciclo de vida del fragmento.

Preguntas frecuentes

¿Qué es un Broadcast Receiver en Android?

Broadcast Receiver es un componente de Android para procesar mensajes Broadcast del sistema y personalizados. Recibe un Intent en el método onReceive, que se ejecuta en el hilo principal, y debe completarse en menos de 10 segundos. Para tareas prolongadas, use WorkManager o JobScheduler.

¿En qué se diferencia Normal Broadcast de Ordered Broadcast?

Normal Broadcast se entrega a todos los receptores de forma asíncrona y en paralelo — el orden no está garantizado, abortBroadcast no funciona. Ordered Broadcast se entrega secuencialmente por prioridad, cada receptor puede interrumpir la cadena o pasar datos al siguiente mediante setResultExtras.

¿Cuál es la diferencia entre registro estático y dinámico?

El registro estático (en el manifiesto) permite que el receptor funcione incluso si la aplicación no se está ejecutando. El registro dinámico (mediante registerReceiver) solo funciona mientras el componente que lo registra esté activo. A partir de Android 8, muchos Broadcast implícitos requieren registro dinámico.

¿Qué restricciones se introdujeron en Android 8 para Broadcast Receiver?

Android 8 (API 26) prohibió el registro estático para la mayoría de los Broadcast implícitos, como CONNECTIVITY_ACTION o ACTION_BATTERY_LOW. Las excepciones incluyen BOOT_COMPLETED, Alarm, hora y algunas otras. Para tareas en segundo plano, use WorkManager en lugar de Broadcast.

¿Cómo pasar datos de Broadcast Receiver a Activity?

Use LiveData, StateFlow, EventBus o LocalBroadcastManager para pasar datos de onReceive a la interfaz de usuario. No intente actualizar la IU directamente desde onReceive — se ejecuta en el hilo principal, pero el receptor no garantiza que la Activity sea visible. LocalBroadcastManager es una opción obsoleta para la comunicación interna.

Resumen

  • Broadcast Receiver es un componente del sistema Android para recibir y procesar eventos globales mediante mensajes Intent del sistema operativo u otras aplicaciones.
  • Normal Broadcast se entrega en paralelo sin garantía de orden; Ordered Broadcast se entrega secuencialmente por prioridad con capacidad de interrumpir la cadena.
  • El registro estático en el manifiesto funciona para procesos que aún no se están ejecutando, pero está restringido en Android 8+ para la mayoría de Broadcast implícitos.
  • El registro dinámico mediante registerReceiver requiere una llamada obligatoria a unregisterReceiver para evitar fugas de memoria.
  • System Broadcast incluye BOOT_COMPLETED, CONNECTIVITY_ACTION, BATTERY_LOW — cada uno contiene datos adicionales en los Extras del Intent.
  • El tiempo de ejecución de onReceive está limitado a 10 segundos — para tareas prolongadas, inicie WorkManager o JobScheduler desde el receptor.
  • Alternativas a Broadcast Receiver en Android 8+: WorkManager para tareas en segundo plano, JobScheduler para tareas periódicas, NotificationListenerService para monitoreo de notificaciones.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también