Android中的sendStickyBroadcast和sendBroadcast有什么区别?

时间:2010-04-06 11:42:25

标签: android android-intent android-broadcast

Android中的sendStickyBroadcastsendBroadcast有什么区别?

3 个答案:

答案 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中已弃用。粘性广播应该   不被使用。它们没有安全性(任何人都可以访问它们),没有   保护(任何人都可以修改它们)以及许多其他问题。该   推荐的模式是使用非粘性广播来报告   一些东西已经改变,另一种机制让应用程序检索   当需要时的当前值

我希望这会有所帮助。