Что такое липкая трансляция?


я наткнулся на этот термин в документации android с сопровождающим определением

это широковещательные передачи, данные которых хранятся системой после завершения, так что клиенты могут быстро получить эти данные, не дожидаясь следующей широковещательной передачи.

что это значит? Может ли кто-нибудь разработать его использование с конкретным примером? Я считаю, что мы должны запросить разрешение на использование этого намерения? Почему так?

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> - Allows an application to broadcast sticky intents.
5 76

5 ответов:

пожалуйста, прочитайте объяснение Марка Мерфи здесь: в чем разница между sendStickyBroadcast и sendBroadcast в Android

вот абстрактный пример того, как можно использовать липкий трансляции:

Intent intent = new Intent("some.custom.action");
intent.putExtra("some_boolean", true);
sendStickyBroadcast(intent);

если вы слушаете эту трансляцию в деятельности, которая была заморожена (onPause), вы можете пропустить фактическое событие. Это позволяет проверить трансляцию после ее запуска (onResume).

EDIT: больше на липкие трансляции...

также проверить removeStickyBroadcast(Intent), и на уровне API 5 +,isInitialStickyBroadcast() для использования в приемнике onReceive.

надеюсь, что это поможет.

обратите внимание, что липкие трансляции являются тяжелыми для системы и не поощряются. Пожалуйста, прочитайте записку от hackbod в обсуждении на 'и параллелизм' в группе разработчиков Android.

@Shouvik, пожалуйста, укажите точный сценарий, в котором вы планируете использовать StickyBroadcasts. Кто-то может предложить альтернативное решение.

sendStickyBroadcast() выполняет sendBroadcast(Intent) известный как липкий, т. е. намерение, которое вы отправляете, остается после завершения трансляции, так что другие могут быстро получить эти данные через возвращаемое значение registerReceiver(BroadcastReceiver, IntentFilter). Во всех других отношениях это ведет себя так же, как sendBroadcast(Intent). Одним из примеров липкой трансляции, отправленной через операционную систему, является ACTION_BATTERY_CHANGED. Когда вы звоните registerReceiver() для этого действия-даже с нулем BroadcastReceiver -- вы получаете намерение, которое было в последний раз передано для этого действия. Следовательно, вы можете использовать это позволяет найти состояние батареи, не обязательно регистрируя все будущие изменения состояния батареи.

значение sticky broadcast - это значение, которое было передано в последний раз и в настоящее время хранится в кэше sticky. Это не значение трансляции, которая была получена прямо сейчас. Я полагаю, вы можете сказать, что это как печенье браузера, что вы можете получить доступ в любое время. Липкая трансляция теперь устарела:

этот метод был устаревшим на уровне API 21. Просматривать информацию о сетевых подключениях должно не использовать. Они не обеспечивают никакой безопасности (любой может получить к ним доступ), нет защита (любой может изменить их), и многие другие проблемы. Этот рекомендуемый шаблон-использовать не липкую трансляцию, чтобы сообщить, что что-то изменилось, с другим механизмом для приложений, чтобы получить текущее значение при желании.

нормальное намерение широковещания больше не доступно после того, как оно было отправлено и обработано системой. Если вы используете метод sendStickyBroadcast(Intent), намерение является липким, то есть намерение, которое вы отправляете, остается после завершения трансляции.

вы ссылаетесь на мой блог: Введите описание ссылки здесь