Was ist der Unterschied zwischen sendStickyBroadcast und sendBroadcast in Android

Antworten:

120

Folgendes sagt das Android SDKsendStickyBroadcast() :

Führen Sie eine sendBroadcast (Absicht) durch, die "klebrig" ist. Dies bedeutet, dass die von Ihnen gesendete Absicht nach Abschluss der Übertragung erhalten bleibt, damit andere diese Daten schnell über den Rückgabewert von registerReceiver (BroadcastReceiver, IntentFilter) abrufen können. In allen anderen Fällen verhält sich dies genauso wie sendBroadcast (Intent).

Ein Beispiel für eine Sticky-Sendung, die über das Betriebssystem gesendet wird, ist ACTION_BATTERY_CHANGED. Wenn Sie registerReceiver()diese Aktion aufrufen - auch mit einem null BroadcastReceiver-, erhalten Sie die Intentzuletzt für diese Aktion ausgestrahlte Aktion. Daher können Sie dies verwenden, um den Zustand der Batterie zu ermitteln, ohne sich unbedingt für alle zukünftigen Zustandsänderungen in der Batterie registrieren zu müssen.

CommonsWare
quelle
6
Wie klebrig ist die Absicht? Wenn Sie registerReceiver ein zweites Mal aufrufen, wird dieselbe Absicht erneut zurückgegeben? (Vorausgesetzt, keine zusätzliche Absicht mit dieser Aktion.)
phreed
22
@phreed: "Wenn Sie registerReceiver ein zweites Mal aufrufen, gibt es wieder dieselbe Absicht zurück?" -- Ja. "Stromausfall?" - Sie verschwinden, genau wie alles im RAM. "Abblenden?" -- Kein Effekt.
CommonsWare
1
Nur um hinzuzufügen, dass klebrige Sendungen von Frau Hackborn strikt abgeraten werden: groups.google.com/d/msg/android-developers/8341SaXhvmY/… . Es ist ein alter Beitrag, der aber wahrscheinlich immer noch gilt
Mr_and_Mrs_D
1
@ Commonsware: Ich kann Ihre Punkte nicht verstehen. Erklären Sie mit normalem Vorsatzbeispiel und mit klebrigem Vorsatzbeispiel für dasselbe Szenario.
Dann
4
@Kushal: "Also, was sollte jetzt eine Alternative für Sticky Broadcast sein?" - Ich kann das nicht wirklich beantworten, da ich nicht weiß, was Ihr Anwendungsfall ist. Sie können eine neue Frage zum Stapelüberlauf stellen, in der Sie Ihre Geschäftsanforderungen beschreiben, erläutern, wie Sie diese über Sticky Broadcasts lösen möchten, und nach alternativen Möglichkeiten zur Lösung desselben Problems fragen.
CommonsWare
54

Typen : - Lokal, Normal, Geordnet und Klebrig

Normale Sendung

: - benutze sendBroadcast ()

: - asynchrone Übertragung

: - Jeder Empfänger empfängt eine Sendung ohne bestimmte Reihenfolge

Bestellte Sendung

: - benutze sendOrderedBroadcast ()

: - Synchronübertragung

: - Empfänger empfängt eine Sendung in Prioritätsbasis

: - Wir können die Übertragung in diesem Typ auch einfach abbrechen

Lokale Sendung

: - Nur verwenden, wenn Broadcast nur innerhalb desselben Prozesses verwendet wird

Sticky Broadcast

: - Die normale Broadcast-Absicht ist nicht mehr verfügbar, nachdem diese vom System gesendet und verarbeitet wurde.

: - sendStickyBroadcast verwenden (Absicht)

: - Die entsprechende Absicht ist klebrig, was bedeutet, dass die Absicht, die Sie senden, nach Abschluss der Übertragung bestehen bleibt.

: - Aus diesem Grund können andere diese Daten schnell über den Rückgabewert von registerReceiver (BroadcastReceiver, IntentFilter) abrufen.

: - abgesehen davon wie sendBroadcast (Intent).

Umang Kothari
quelle
sehr hilfreich ..
Maher Abuthraa
10

sendbroadcast() - normale Sendung, aber wir können auch Priorität setzen.

sendstickybroadcast()- Die damit verabschiedete Absicht gilt für zukünftige Benutzer, die sich über Code registrieren (dynamische Empfänger). Die Sendung, die bei Android bleibt und erneut an die zukünftigen Anforderungen von Rundfunkempfängern gesendet oder erneut gesendet wird

Wenn jemand eine Sticky-Sendung mit sendet, sendstickyBroadcast(intent);ist diese Sendung für zukünftige Benutzer verfügbar, die dynamische Empfänger verwenden.

Aber jetzt sollten Sie keine sendStickyBroadcast()Methode verwenden, die veraltet ist

Aus der Android-Dokumentation:

Diese Methode wurde in API-Level 21 nicht mehr unterstützt. Sticky-Broadcasts sollten nicht verwendet werden. Sie bieten keine Sicherheit (jeder kann darauf zugreifen), keinen Schutz (jeder kann sie ändern) und viele andere Probleme. Das empfohlene Muster besteht darin, eine nicht klebrige Sendung zu verwenden, um zu melden, dass sich etwas geändert hat, und einen anderen Mechanismus für Apps, um den aktuellen Wert bei Bedarf abzurufen

Ich hoffe das hilft.

Rajesh
quelle