В чем разница между sendStickyBroadcast и sendBroadcast на Android?

В чем разница между sendStickyBroadcast и sendBroadcast в Android?

Ответ 1

Вот что говорит Android SDK о sendStickyBroadcast():

Выполните команду sendBroadcast (Intent), которая "липкий", что означает "Намерение" отправляются туда после трансляция завершена, так что другие может быстро получить эти данные через возвращаемое значение registerReceiver (BroadcastReceiver, IntentFilter). Другими словами, это ведет себя так же, как sendBroadcast (Намерение).

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

Ответ 2

Типы: - Локальные, нормальные, упорядоченные и липкие

Обычный широковещательный

: - использовать sendBroadcast()

: - асинхронное вещание

: - любой получатель получает широковещательную передачу не в каком-либо конкретном порядке

Заказная трансляция

: - использовать sendOrderedBroadcast()

: - синхронное вещание

: - приемник принимает широковещательную передачу в приоритетной базе

: - мы также можем просто прервать трансляцию в этом типе

Локальная трансляция

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

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

: - нормальное назначение трансляции больше не доступно после того, как была отправлена ​​и обработана системой.

: - использовать sendStickyBroadcast (Intent)

: - соответствующее намерение является липким, то есть намерение, которое вы отправляете, остается после завершения трансляции.

: - из-за этого другие могут быстро извлекать эти данные через возвращаемое значение registerReceiver (BroadcastReceiver, IntentFilter).

: - кроме этого, как sendBroadcast (Intent).

Ответ 3

sendbroadcast() - обычная широковещательная передача, но мы также можем установить приоритет.

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

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

Но теперь вы не должны использовать метод sendstickybroadcast(), он устарел

Из документации для Android:

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

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