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
- 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.
- Broadcast kann abgebrochen werden: Rufen Sie innerhalb von
onReceive()des EmpfängersabortBroadcast()auf, um den Broadcast zu beenden. Alle nachfolgenden Empfänger empfangen diesen Broadcast nicht mehr. - 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
- Wertebereich:
- 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
- Demo1 ruft
sendOrderedBroadcastauf, um den Broadcast zu senden - Das System sucht alle Empfänger mit passender Action, sortiert nach priority absteigend
- 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
- Wenn hier
- Demo2-Empfänger führt onReceive aus
Vergleichstabelle
| Eigenschaft | Ungeordneter Broadcast sendBroadcast | Geordneter Broadcast sendOrderedBroadcast |
|---|---|---|
| Empfangsreihenfolge | Parallel, fast gleichzeitig empfangen, keine Reihenfolge | Seriell, nach priority sortiert, höhere Priorität empfängt zuerst |
| Broadcast-Abbruch | Nicht abbrechbar, abortBroadcast ohne Wirkung | Kann mit abortBroadcast abgebrochen werden |
| Datenübertragung | Veränderte Daten können nicht an den nächsten Empfänger übergeben werden | Intent-Daten können verändert und weitergereicht werden |
Geordneter Broadcast