2010-04-06 9 views

Antwort

110

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 nullBroadcastReceiver - 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.

+6

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

+0

Was passiert mit "sticky intents" über: Ausschalten? Abblenden? usw. – phreed

+20

@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

37

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).

9

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.