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

cob*_*ect 102 android android-intent android-broadcast

Android sendStickyBroadcastsendBroadcastAndroid有什么区别?

Com*_*are 117

以下是Android SDK所说的内容sendStickyBroadcast():

执行"粘性"的sendBroadcast(Intent),意味着您发送的Intent在广播完成后保持不变,以便其他人可以通过registerReceiver(BroadcastReceiver,IntentFilter)的返回值快速检索该数据.在所有其他方面,这与sendBroadcast(Intent)的行为相同.

通过操作系统发送的粘性广播的一个例子是ACTION_BATTERY_CHANGED.当你呼吁registerReceiver()采取这一行动时 - 即使是null BroadcastReceiver- 你也可以获得该Intent行动的最后一次广播.因此,您可以使用它来查找电池的状态,而无需注册电池的所有未来状态更改.

  • @phreed:"当你第二次调用registerReceiver时它会再次返回相同的意图吗?" - 是的 "断电?" - 它们就像RAM中的任何东西一样消失了."屏幕关闭?" - 没有效果. (22认同)
  • 意图有多粘?当你再次调用registerReceiver时它会再次返回相同的意图吗?(假设该行动没有其他意图.) (6认同)
  • @Kushal:"那么现在应该选择粘性广播呢?" - 我无法回答这个问题,因为我不知道你的用例是什么.您可以考虑提出一个新的Stack Overflow问题,在那里描述您的业务需求,解释您是如何通过粘性广播解决问题的,并询问解决同一问题的其他方法. (4认同)

Uma*_*ari 49

类型: - 本地,普通,有序和粘性

普通广播

: - 使用sendBroadcast()

: - 异步广播

: - 任何接收者接收广播而不是任何特定的顺序

有序广播

: - 使用sendOrderedBroadcast()

: - 同步广播

: - 接收方接收优先级广播

: - 我们也可以简单地中止这种类型的广播

本地广播

: - 仅在广播仅在同一进程内使用时使用

粘性广播

: - 系统发送和处理后,普通广播意图不再可用.

: - 使用sendStickyBroadcast(Intent)

: - 相应的意图是粘性的,这意味着您发送的意图在广播完成后保持不变.

: - 因为这个,其他人可以通过registerReceiver(BroadcastReceiver,IntentFilter)的返回值快速检索数据.

: - 除了sendBroadcast(Intent)之外.


Raj*_*esh 10

sendbroadcast() - 普通广播,但我们也可以设置优先级.

sendstickybroadcast() - 通过此方式传递的意图将适用于通过代码注册的未来用户(动态接收器).将坚持使用android的广播,并将重新传送或重新播放给任何广播接收器的未来请求

当某人发送粘性广播时sendstickyBroadcast(intent);,该广播将可用于使用动态接收器的未来用户.

但是现在你不应该使用 sendStickyBroadcast()它被弃用的方法

来自Android文档:

此方法在API级别21中已弃用.不应使用粘性广播.它们不提供安全性(任何人都可以访问它们),没有保护(任何人都可以修改它们)以及许多其他问题.建议的模式是使用非粘性广播来报告某些内容已发生变化,并使用另一种机制让应用程序在需要时检索当前值

我希望这有帮助.