Geordneter Broadcast

Android Geordneter Broadcast sendOrderedBroadcast

Der geordnete Broadcast wird mit dem ungeordneten Broadcast (normales sendBroadcast) verglichen. Es handelt sich um einen Broadcast, der seriell nacheinander übermittelt wird und eine häufig gestellte Frage im Vorstellungsgespräch ist.

1. Eigenschaften des geordneten Broadcasts

  1. Serielle Ausführung (lineare Übertragung): Empfänger empfangen den Broadcast nacheinander. Der nächste Empfänger erhält den Broadcast erst, wenn der vorherige die Verarbeitung abgeschlossen hat; sie empfangen ihn nicht gleichzeitig.
  2. Broadcast kann abgebrochen werden: Rufen Sie innerhalb von onReceive() des Empfängers abortBroadcast() auf, um den Broadcast zu beenden. Alle nachfolgenden Empfänger empfangen diesen Broadcast nicht mehr.
  3. Priorität bestimmt die Empfangsreihenfolge: android:priority. Höherer Zahlenwert bedeutet höhere Priorität und früheren Empfang des Broadcasts.
    • Wertebereich: -1000 ~ 1000
    • Beispiel: demo1 mit priority=100, demo2 mit kleinerem Wert. Dann empfängt demo1 zuerst, demo2 danach
  4. Empfänger können Broadcast-Daten übernehmen, verändern und an den nächsten Empfänger weitergeben.

Hinweis: Der ungeordnete Broadcast sendBroadcast() kann nicht abgebrochen werden und hat keine Priorität. Mehrere Empfänger empfangen den Broadcast fast gleichzeitig

2. Code zum Senden eines geordneten Broadcasts (Sender Demo1)

Intent intent = new Intent("com.foxdevelop.www.senddemo.MY_BROADCAST");
// Geordneten Broadcast senden. Der zweite Parameter ist die Berechtigung (null = keine Berechtigungseinschränkung)
sendOrderedBroadcast(intent, null);
Code-Sprache: JavaScript (javascript)

3. Statisch registrierter Empfänger mit Priorität, AndroidManifest.xml

<receiver android:name=".MyReceiver">
    <!-- priority: höhere Zahl bedeutet früherer Empfang -->
    <intent-filter android:priority="100">
        <action android:name="com.foxdevelop.www.senddemo.MY_BROADCAST"/>
    </intent-filter>
</receiver>
Code-Sprache: HTML, XML (xml)

Legen Sie für den Empfänger in Demo2 eine priority kleiner als 100 fest, zum Beispiel android:priority="50". Ausführungsreihenfolge: Demo1-Empfänger → Demo2-Empfänger

4. Broadcast abbrechen abortBroadcast()

public void onReceive(Context context, Intent intent) {
    Toast.makeText(context, "Benutzerdefinierten Broadcast empfangen", Toast.LENGTH_LONG).show();
    // Geordneten Broadcast abbrechen! Nachfolgende Empfänger mit niedrigerer Priorität erhalten diesen Broadcast nicht mehr
    abortBroadcast();
}
Code-Sprache: JavaScript (javascript)

Wichtige Punkte:

  • abortBroadcast() wirkt nur bei geordneten Broadcasts; der Aufruf bei normalen ungeordneten Broadcasts hat keine Wirkung.
  • Einmal abgebrochen, wird die Übertragungskette des Broadcasts beendet.

5. Vollständiger Ablauf des geordneten Broadcasts

  1. Demo1 ruft sendOrderedBroadcast auf, um den Broadcast zu senden
  2. Das System sucht alle Empfänger mit passender Action, sortiert nach priority absteigend
  3. Empfänger mit priority 100 (Demo1-Empfänger) empfängt zuerst → führt onReceive aus
    • Wenn hier abortBroadcast() aufgerufen wird, stoppt der Broadcast sofort, Demo2 (priority50) erhält keinen Broadcast
    • Wenn abortBroadcast nicht aufgerufen wird, wird der Broadcast weiter an Demo2-Empfänger übergeben
  4. Demo2-Empfänger führt onReceive aus

Vergleichstabelle

EigenschaftUngeordneter Broadcast sendBroadcastGeordneter Broadcast sendOrderedBroadcast
EmpfangsreihenfolgeParallel, fast gleichzeitig empfangen, keine ReihenfolgeSeriell, nach priority sortiert, höhere Priorität empfängt zuerst
Broadcast-AbbruchNicht abbrechbar, abortBroadcast ohne WirkungKann mit abortBroadcast abgebrochen werden
DatenübertragungVeränderte Daten können nicht an den nächsten Empfänger übergeben werdenIntent-Daten können verändert und weitergereicht werden

Geordneter Broadcast

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert