Что такое липкая трансляция? - PullRequest
81 голосов
/ 16 августа 2010

Я сталкивался с этим термином в документации Android с приложенным определением

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

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

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

Ответы [ 5 ]

102 голосов
/ 16 августа 2010

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

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

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

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

РЕДАКТИРОВАТЬ: Подробнее о липких трансляциях ...

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

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

21 голосов
/ 28 марта 2011

Обратите внимание, что Sticky-трансляции сильно загружены в системе и не приветствуются.Прочитайте примечание от hackbod в обсуждении 'Sticky Broadcasts и Concurrency Options' в группе разработчиков Android.

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

8 голосов
/ 22 марта 2015

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

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

8 голосов
/ 28 апреля 2014

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

2 голосов
/ 30 октября 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...