Was ist der Unterschied zwischen sendStickyBroadcast
und sendBroadcast
in Android?Was ist der Unterschied zwischen sendStickyBroadcast und sendBroadcast in Android
Antwort
Here is what the Android SDK says about sendStickyBroadcast()
:
Führen Sie eine sendBroadcast (Intent), dass "sticky" ist Sinn der Intent Sie sind Aufenthalte um nach dem Broadcast Senden abgeschlossen ist, so dass andere schnell, dass die Daten abrufen können durch der Rückgabewert RegisterReceiver (BroadcastReceiver, IntentFilter). Auf alle anderen Weisen verhält sich wie sendBroadcast (Intent).
Ein Beispiel für eine über das Betriebssystem gesendete Kurzsendung ist ACTION_BATTERY_CHANGED
. Wenn Sie registerReceiver()
für diese Aktion aufrufen - sogar mit einer null
BroadcastReceiver
- erhalten Sie die Intent
, die zuletzt für diese Aktion ausgestrahlt wurde. Damit können Sie den Zustand der Batterie ermitteln, ohne dass Sie sich für alle zukünftigen Zustandsänderungen der Batterie registrieren müssen.
Typen: - Lokale, Normal, bestellt und Sticky
Normale Sendung
: - verwenden sendBroadcast()
: - asynchrone Broadcast
: - jeder Empfänger empfängt Broadcast keine bestimmte Reihenfolge
Sendung bestellt
: - verwenden sendOrderedBroadcast()
: - Synchron Broadcast
: - Empfänger empfängt in Prioritätsbasis übertragen
: - wir auch einfach können Sendung in dieser Art abbrechen
Lokale Sendung
: - nur verwenden, wenn Broadcast nur innerhalb gleichen Prozess verwendet wird
Dauerhaften Broadcast
: - normale Sendung Absicht nicht verfügbar ist mehr nach ist, wurde durch das System senden und verarbeitet werden.
: - verwenden sendStickyBroadcast (Intent)
: - die entsprechende Absicht ist klebrig, also die Absicht Sie Aufenthalte um nach der Sendung abgeschlossen ist senden.
: - aus diesem Grund können andere diese Daten über den Rückgabewert von RegisterReceiver (BroadcastReceiver, IntentFilter) schnell abrufen.
: - abgesehen von dem gleichen wie sendBroadcast (Intent).
sendbroadcast()
- normale Sendung, aber wir können Priorität auch setzen.
sendstickybroadcast()
- Absicht mit diesem wird für künftige Benutzer, die über Code (dynamische Empfänger) registrieren Stick sein. Die Sendung, die mit Android bleiben wird, und wird wieder geliefert werden oder erneut übertragen auf die zukünftigen Anforderungen von irgendwelchen Rundfunkempfängern
Wenn jemand eine klebrige Sendung mit sendstickyBroadcast(intent);
sendet dann wird die Sendung für den zukünftigen Nutzern zur Verfügung, die verwenden dynamische Empfänger.
Aber jetzt sollten Sie nicht sendStickyBroadcast()
Methode verwenden, es
Von Android Dokumentation ist veraltet:
Diese Methode in API-Ebene weiterentwickelt wurde 21 Sticky Sendungen sollten nicht verwendet werden. Sie bieten keine Sicherheit (jeder kann darauf zugreifen), keine Schutz (jeder kann sie ändern) und viele andere Probleme. Die empfohlene Muster sind eine nicht-klebrige Sendung zu verwenden, zu berichten, dass etwas geändert hat, mit einem anderen Mechanismus für Anwendungen des aktuellen Wert abzuzurufen, wenn
gewünschten
Ich hoffe, das hilft.
Wie klebrig ist die Absicht? Wenn Sie registerReceiver ein zweites Mal aufrufen, gibt es wieder dieselbe Absicht zurück? (Unter der Annahme, dass mit dieser Aktion keine zusätzliche Absicht vorliegt.) – phreed
Was passiert mit "sticky intents" über: Ausschalten? Abblenden? usw. – phreed
@phreed: "Wenn Sie registerReceiver ein zweites Mal aufrufen, gibt es die gleiche Absicht wieder zurück?" -- Ja. "Stromausfall?" - Sie gehen weg, genauso wie alles im RAM. "Abblenden?" -- Kein Effekt. – CommonsWare