В чем разница между sendStickyBroadcast
и sendBroadcast
в Android?В чем разница между sendStickyBroadcast и sendBroadcast в Android
ответ
Here is what the Android SDK says about sendStickyBroadcast()
:
Выполните sendBroadcast (Intent), что является «липким», что означает Намерение вы отправляете пребывание вокруг после трансляции завершена, так что другие могут быстро получить эти данные через возвращаемое значение registerReceiver (BroadcastReceiver, IntentFilter). Другими словами, этот ведет себя так же, как sendBroadcast (Intent).
Одним из примеров липкой передачи, отправленной через операционную систему, является ACTION_BATTERY_CHANGED
. Когда вы вызываете registerReceiver()
за это действие - даже с null
BroadcastReceiver
- вы получаете Intent
, последний раз транслировавшийся для этого действия. Следовательно, вы можете использовать это, чтобы найти состояние батареи, не обязательно регистрируясь для всех будущих изменений состояния батареи.
Виды: - Local, Normal, Упорядоченные и Sticky
Нормальная Broadcast
: - использовать sendBroadcast()
: - асинхронный широковещательный
: - любой приемник получает широковещательную передачу не в каком-либо конкретном порядке
Заказанный Broadcast
: - использовать sendOrderedBroadcast()
: - синхронное широковещательный
: - приемник принимает широковещательные в приоритетной базе
: - мы можем просто прекратить вещание данного типа
Местное радиовещание
: - использовать только тогда, когда широковещательный используется только внутри того же процесса
Липкий трансляция
: - нормальное вещание намерение не доступно больше после отправки и был обработан системой.
: - использовать sendStickyBroadcast (Intent)
: - соответствующее намерение является липким, то есть намерение вы отправляете пребывание вокруг после трансляции завершена.
: - из-за этого другие могут быстро извлечь эти данные через возвращаемое значение registerReceiver (BroadcastReceiver, IntentFilter).
: - кроме этого же, как sendBroadcast (Intent).
sendbroadcast()
- обычная передача, но мы также можем установить приоритет.
sendstickybroadcast()
- Цель, пройденная с этим, будет палкой для будущих пользователей, которые регистрируются через код (динамические приемники). Радиопередачи, который будет придерживаться андроид, и будет вновь доставлен или повторно транслироваться на будущие запросы от любых радиовещательных приемников
Когда кто-то посылает липкое вещание, используя sendstickyBroadcast(intent);
то, что трансляция будет доступна для будущих пользователей, используют динамические приемники.
Но теперь вы не должны использовать метод sendStickyBroadcast()
это устаревшее
С Android Документация:
Этот метод устаревшее уровня API 21. Липкие вещает должны не могут быть использованы. Они не обеспечивают безопасность (любой может получить к ним доступ), нет защиты (любой может их изменить) и многие другие проблемы. рекомендуется картина использовать незакрепленного эфир, чтобы сообщить, что что-то изменилось, с другим механизмом для приложений, чтобы получить текущее значение всякий раз, когда желательно
Я надеюсь, что это помогает.
Насколько липким является намерение? Когда вы снова вызываете registerReceiver, он снова возвращает то же намерение? (Предполагая никаких дополнительных намерений с этим действием.) – phreed
Что происходит с липкими намерениями: отключить питание? отключения экрана? и т. д. – phreed
@freed: «Когда вы вызываете registerReceiver во второй раз, он снова возвращает то же намерение?» -- да. "выключить?" - они уходят, как и все в ОЗУ. "отключения экрана?" -- нет эффекта. – CommonsWare