Android中的sendStickyBroadcast
和sendBroadcast
有什么区别?
答案 0 :(得分:117)
Here is what the Android SDK says about sendStickyBroadcast()
:
执行sendBroadcast(意图) 是“粘性”,意思是你的意图 在发送后留下来 广播是完整的,以便其他人 可以通过快速检索数据 的回报值 registerReceiver(广播接收器, IntentFilter的)。在所有其他方面,这 行为与...相同 sendBroadcast(意向)。
通过操作系统发送的粘性广播的一个示例是ACTION_BATTERY_CHANGED
。当您针对该操作致电registerReceiver()
时 - 即使使用null
BroadcastReceiver
- 您也会获得上次为该操作广播的Intent
。因此,您可以使用它来查找电池的状态,而无需注册电池中所有未来的状态更改。
答案 1 :(得分:46)
类型: - 本地,普通,有序和粘性
普通广播
: - 使用sendBroadcast()
: - 异步广播
: - 任何接收方都收到广播而不是任何特定订单
有序广播
: - 使用sendOrderedBroadcast()
: - 同步广播
: - 接收方接收优先级广播
: - 我们也可以简单地中止这种类型的广播
本地广播
: - 仅在广播仅在同一过程中使用
时使用粘性广播
: - 系统发送和处理正常广播意图后,不再可用普通广播意图。
: - 使用sendStickyBroadcast(Intent)
: - 相应的意图是粘性的,这意味着您发送的意图在广播完成后保持不变。
: - 因为这个,其他人可以通过registerReceiver(BroadcastReceiver,IntentFilter)的返回值快速检索数据。
: - 除了与sendBroadcast(意图)相同。
答案 2 :(得分:9)
sendbroadcast()
- 正常广播,但我们也可以设置优先级。
sendstickybroadcast()
- 通过此方式传递的意图将适用于通过代码注册的未来用户(动态接收器)。
广播将坚持使用Android,并将重新传送或重新播放给任何广播接收器的未来请求
当某人使用sendstickyBroadcast(intent);
发送粘性广播时,该广播将可供将来使用动态接收器的用户使用。
但是现在你不应该使用sendStickyBroadcast()
方法,不推荐使用
来自Android文档:
此方法在API级别21中已弃用。粘性广播应该 不被使用。它们没有安全性(任何人都可以访问它们),没有 保护(任何人都可以修改它们)以及许多其他问题。该 推荐的模式是使用非粘性广播来报告 一些东西已经改变,另一种机制让应用程序检索 当需要时的当前值
我希望这会有所帮助。