яка різниця між sendStickyBroadcast і sendBroadcast в Android


Відповіді:


120

Ось що говорить про Android SDKsendStickyBroadcast() :

Виконайте "липкий" sendBroadcast (Намір), тобто намір, який ви надсилаєте, залишається після завершення трансляції, щоб інші могли швидко отримати ці дані через повернене значення registerReceiver (BroadcastReceiver, IntentFilter). У всіх інших способах це поводиться так само, як sendBroadcast (Намір).

Одним із прикладів липкої трансляції, що надсилається через операційну систему, є ACTION_BATTERY_CHANGED. Коли ви закликаєте registerReceiver()до цієї дії - навіть за допомогою null BroadcastReceiver-, ви отримуєте Intentостанню трансляцію цієї дії. Отже, ви можете використовувати це для пошуку стану акумулятора, не обов'язково реєструючи всі майбутні зміни стану акумулятора.


6
Наскільки липким є намір? Коли ви вдруге зателефонуєте на registerReceiver, чи повертається він знову такий же намір? (Припускаючи, що немає ніяких додаткових намірів щодо цієї дії.)
фразеноване

22
@phreed: "Коли ви вдруге зателефонуєте registerReceiver, чи повертається він знову той же намір?" -- так. "вимкнення живлення?" - вони йдуть геть, як і все, що робиться в оперативній пам'яті. "екран вимкнено?" - ніякого ефекту.
CommonsWare

1
Просто додамо, що палкі трансляції суворо відлякують пані Хакборн: groups.google.com/d/msg/android-developers/8341SaXhvmY/… . Це стара публікація, але, ймовірно, застосовується досі
Mr_and_Mrs_D

1
@ Commonsware: я не можу зрозуміти ваші пункти. Поясніть з нормальним прикладом намірів і з клейким прикладом намірів для того ж сценарію.
Тоді

4
@Kushal: "Отже, яка зараз має бути альтернатива для липкого мовлення?" - Я не можу реально відповісти на це, оскільки не знаю, що стосується Вашого використання. Ви можете попросити задати нове запитання щодо переповнення стека, де ви описуєте свою ділову вимогу, поясніть, як ви думали вирішити це за допомогою стирких трансляцій, а також запропонуйте альтернативні способи вирішення цієї самої проблеми.
CommonsWare

54

Типи : - Місцеві, Нормальні, Впорядковані та Клейкі

Звичайна трансляція

: - використовувати sendBroadcast ()

: - асинхронна трансляція

: - будь-який приймач отримує трансляцію не будь-якого конкретного замовлення

Замовлено трансляцію

: - використовувати sendOrderedBroadcast ()

: - синхронне мовлення

: - приймач приймає трансляцію в пріоритетній базі

: - ми також можемо просто перервати трансляцію такого типу

Місцева трансляція

: - використовувати лише тоді, коли трансляція використовується лише всередині того самого процесу

Липка трансляція

: - нормальний намір трансляції більше недоступний після того, як система його надіслала та обробила.

: - використовувати sendStickyBroadcast (Намір)

: - відповідний намір є липким, тобто намір, який ви надсилаєте, залишається навколо після завершення трансляції.

: - через це інші можуть швидко отримати ці дані через повернене значення registerReceiver (BroadcastReceiver, IntentFilter).

: - крім цього ж, що і sendBroadcast (Намір).


дуже корисно ..
Maher Abuthraa

10

sendbroadcast() - нормальне мовлення, але ми також можемо встановити пріоритет.

sendstickybroadcast()- наміри, передані з цим, будуть дотримуватися майбутніх користувачів, які реєструються через код (динамічні приймачі). Трансляція, яка підтримуватиметься на android, буде повторно доставлена ​​або повторно передана на майбутні запити від будь-яких приймачів широкомовної програми

Коли хтось надсилає клейку трансляцію з використанням, sendstickyBroadcast(intent);тоді ця трансляція буде доступна для майбутніх користувачів, які використовують динамічні приймачі.

Але тепер не слід використовувати sendStickyBroadcast()метод, який він застарів

З Документації на Android:

Цей метод був застарілий у рівні 21 API. Клейкі трансляції не слід використовувати. Вони не забезпечують ніякої безпеки (кожен може отримати до них доступ), ніякого захисту (будь-хто може змінювати їх) та багатьох інших проблем. Рекомендований зразок - використовувати неліпку трансляцію, щоб повідомити, що щось змінилося, з іншим механізмом для додатків, щоб отримати поточне значення, коли потрібно

Я сподіваюся, що це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.