Jaka jest różnica między sendStickyBroadcast i sendBroadcast w systemie Android


Odpowiedzi:


120

Oto, o czym mówi Android SDKsendStickyBroadcast() :

Wykonaj sendBroadcast (Intent), który jest „sticky”, co oznacza, że ​​intencja, którą wysyłasz, pozostaje po zakończeniu transmisji, dzięki czemu inni mogą szybko odzyskać te dane za pomocą wartości zwracanej przez registerReceiver (BroadcastReceiver, IntentFilter). Pod każdym innym względem zachowuje się tak samo jak sendBroadcast (Intent).

Jednym z przykładów przyklejonej transmisji wysyłanej przez system operacyjny jest ACTION_BATTERY_CHANGED. Kiedy wzywasz registerReceiver()do tego działania - nawet z null BroadcastReceiver- otrzymujesz komunikat, Intentktóry był ostatnio nadawany dla tej akcji. W związku z tym można go użyć do znalezienia stanu baterii bez konieczności rejestrowania wszystkich przyszłych zmian stanu baterii.


6
Jak lepki jest zamiar? Kiedy dzwonisz do registerReceiver po raz drugi, czy zwraca to ten sam zamiar? (Zakładając, że nie ma dodatkowego zamiaru w tej akcji.)
wysłano

22
@phreed: "Kiedy dzwonisz do registerReceiver po raz drugi, zwraca to ten sam zamiar?" -- tak. "wyłączać?" - znikają, tak jak wszystko w pamięci RAM. "wyłaczony ekran?" -- bez efektu.
CommonsWare

1
Dodam tylko, że pani Hackborn stanowczo odradza emisje przyklejone: groups.google.com/d/msg/android-developers/8341SaXhvmY/… . Jest to stary post, ale prawdopodobnie nadal obowiązuje
Mr_and_Mrs_D

1
@ Commonsware: nie rozumiem twoich punktów. Wyjaśnij przykładem normalnego zamiaru i lepkim przykładem intencji dla tego samego scenariusza. Wtedy
przyda

4
@Kushal: "Więc jaka powinna być teraz alternatywa dla przyklejonej transmisji?" - Naprawdę nie mogę na to odpowiedzieć, ponieważ nie wiem, jaki jest twój przypadek użycia. Możesz rozważyć zadanie nowego pytania przepełnienia stosu, w którym opiszesz swoje wymagania biznesowe, wyjaśnisz, jak myślisz o rozwiązaniu go za pomocą lepkich transmisji i poprosisz o alternatywne sposoby rozwiązania tego samego problemu.
CommonsWare

54

Rodzaje : - Lokalne, Normalne, Uporządkowane i Lepkie

Normalna transmisja

: - użyj sendBroadcast ()

: - emisja asynchroniczna

: - dowolny odbiornik odbiera audycje, a nie w określonej kolejności

Zamówiona transmisja

: - użyj sendOrderedBroadcast ()

: - emisja synchroniczna

: - odbiornik odbiera audycje w bazie priorytetów

: - możemy też po prostu przerwać nadawanie tego typu

Transmisja lokalna

: - używaj tylko wtedy, gdy rozgłaszanie jest używane tylko w tym samym procesie

Sticky Broadcast

: - normalne zamiary emisji nie są już dostępne po wysłaniu i przetworzeniu przez system.

: - użyj sendStickyBroadcast (Intent)

: - odpowiednia intencja jest lepka, co oznacza, że ​​intencja, którą wysyłasz, pozostanie w pobliżu po zakończeniu transmisji.

: - z tego powodu inni mogą szybko pobrać te dane poprzez wartość zwracaną przez registerReceiver (BroadcastReceiver, IntentFilter).

: - poza tym samym co sendBroadcast (Intent).


10

sendbroadcast() - normalna transmisja, ale możemy też ustawić priorytet.

sendstickybroadcast()- zamiar przekazany wraz z tym będzie trzymany dla przyszłych użytkowników, którzy rejestrują się za pomocą kodu (odbiorniki dynamiczne). Transmisja, która pozostanie z Androidem i zostanie ponownie dostarczona lub ponownie nadana do przyszłych żądań z dowolnych odbiorników transmisji

Kiedy ktoś wyśle ​​stałą transmisję za pomocą, sendstickyBroadcast(intent);wtedy ta transmisja będzie dostępna dla przyszłych użytkowników korzystających z dynamicznych odbiorników.

Ale teraz nie powinieneś używać sendStickyBroadcast()metody, która jest przestarzała

Z dokumentacji systemu Android:

Ta metoda została wycofana na poziomie interfejsu API 21. Nie należy używać emisji trwałych. Nie zapewniają żadnych zabezpieczeń (każdy ma do nich dostęp), żadnej ochrony (każdy może je modyfikować) i wielu innych problemów. Zalecanym wzorcem jest użycie nieprzywierającej transmisji, aby zgłosić, że coś się zmieniło, z innym mechanizmem dla aplikacji do pobierania bieżącej wartości w dowolnym momencie

Mam nadzieję, że to pomoże.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.