Broadcast ordenado

Broadcast ordenado de Android sendOrderedBroadcast

El broadcast ordenado se compara con el broadcast desordenado (el método común sendBroadcast). Se trata de un broadcast que se transmite uno tras otro de forma secuencial y es una pregunta muy habitual en entrevistas de trabajo.

1. Características del broadcast ordenado

  1. Ejecución secuencial (transmisión lineal): Los receptores reciben el broadcast uno por uno en orden. El mensaje solo pasa al siguiente receptor cuando el anterior ha terminado su procesamiento, no los reciben todos al mismo tiempo.
  2. Se puede interrumpir: Si llamas a abortBroadcast() dentro del método onReceive() del receptor, el broadcast finaliza y todos los receptores que vienen después no recibirán este broadcast.
  3. La prioridad define el orden de recepción: android:priority. Cuanto mayor sea el valor numérico, mayor será la prioridad y antes recibirá el broadcast.
    • Rango de valores: -1000 ~ 1000
    • Ejemplo: demo1 tiene priority=100, demo2 usa un valor menor. En ese caso demo1 recibe primero y demo2 después
  4. Los receptores pueden transportar y modificar los datos del broadcast para enviarlos al siguiente receptor.

Atención: El broadcast desordenado sendBroadcast() no se puede interrumpir, no tiene prioridad y varios receptores lo reciben casi al mismo tiempo

2. Código para enviar un broadcast ordenado (Emisor Demo1)

Intent intent = new Intent("com.foxdevelop.www.senddemo.MY_BROADCAST");
// Enviamos broadcast ordenado, el segundo parámetro es el permiso (null significa sin restricciones de permiso)
sendOrderedBroadcast(intent, null);
Lenguaje del código: JavaScript (javascript)

3. Receptor registrado de forma estática, configuración de prioridad AndroidManifest.xml

<receiver android:name=".MyReceiver">
    <!-- priority: prioridad, un número mayor recibe antes el broadcast -->
    <intent-filter android:priority="100">
        <action android:name="com.foxdevelop.www.senddemo.MY_BROADCAST"/>
    </intent-filter>
</receiver>
Lenguaje del código: HTML, XML (xml)

En el receptor de Demo2 configuramos una priority menor que 100, por ejemplo android:priority="50". Orden de ejecución: Receptor Demo1 → Receptor Demo2

4. Interrumpir broadcast abortBroadcast()

public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "Hemos recibido nuestro broadcast personalizado", Toast.LENGTH_LONG).show();
    // Interrumpimos el broadcast ordenado. Los receptores con menor prioridad posterior no recibirán este mensaje
    abortBroadcast();
}
Lenguaje del código: JavaScript (javascript)

Puntos clave:

  • abortBroadcast() solo funciona en broadcasts ordenados; al llamarlo en un broadcast desordenado normal no tiene efecto.
  • Una vez interrumpido, la cadena de transmisión del broadcast se detiene.

5. Flujo completo de ejecución del broadcast ordenado

  1. Demo1 llama a sendOrderedBroadcast para emitir el broadcast
  2. El sistema busca todos los receptores de broadcast con Action coincidente y los ordena por priority de mayor a menor
  3. El receptor con prioridad 100 (Receptor Demo1) recibe primero → ejecuta onReceive
    • Si se llama a abortBroadcast() aquí, se detiene inmediatamente; Demo2 (priority50) no recibe el broadcast
    • Si no se invoca abortBroadcast, el broadcast continúa hacia el receptor Demo2
  4. El receptor Demo2 ejecuta onReceive

Tabla comparativa

CaracterísticaBroadcast desordenado sendBroadcastBroadcast ordenado sendOrderedBroadcast
Orden de recepciónParalelo, recepción casi simultánea, sin ordenSecuencial, según priority, mayor prioridad recibe primero
Interrupción del broadcastNo se puede interrumpir, abortBroadcast no tiene efectoSe puede interrumpir llamando a abortBroadcast
Transmisión de datosNo se pueden enviar datos modificados al siguiente receptorSe pueden modificar los datos del Intent y transmitirlos después

Broadcast ordenado

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *