Android中sendStickyBroadcast和sendBroadcast有什么区别


Answers:


120

这是Android SDK所说的sendStickyBroadcast()

执行一个“粘性”的sendBroadcast(Intent),这意味着您要发送的Intent在广播完成后仍然存在,以便其他人可以通过registerReceiver(BroadcastReceiver,IntentFilter)的返回值快速检索该数据。在所有其他方面,此行为与sendBroadcast(Intent)相同。

通过操作系统发送的粘性广播的一个示例是ACTION_BATTERY_CHANGED。当您要求registerReceiver()采取该行动时-即使使用-也会null BroadcastReceiver获得该Intent行动的最后广播。因此,您可以使用它来查找电池的状态,而不必注册电池中所有将来的状态变化。


6
意图到底有多粘?当您再次调用registerReceiver时,它是否再次返回相同的意图?(假设该操作没有其他意图。)
2012年

22
@phreed:“当您第二次调用registerReceiver时,它是否再次返回相同的意图?” -是的 “断电?” -它们消失了,就像RAM中的任何东西一样。“关闭屏幕?” - 没有效果。
CommonsWare'4

1
补充一点,Hackborn女士不建议使用粘性广播:groups.google.com/d/msg/android-developers/8341SaXhvmY/…。这是一个旧帖子,但可能仍然适用
Mr_and_Mrs_D

1
@ Commonsware:我无法理解您的观点。在相同的情况下用正常的意图示例和粘性意图示例进行解释。然后对我有用的一个清晰的想法
SIVAKUMAR.J 2014年

4
@Kushal:“那么现在粘性广播应该有什么替代方案呢?” -我无法真正回答,因为我不知道您的用例是什么。您可能会考虑提出一个新的Stack Overflow问题,在其中描述您的业务需求,解释您如何通过粘性广播解决该问题,并寻求解决该问题的替代方法。
CommonsWare 2015年

54

类型:-本地,常规,有序和粘性

普通广播

:-使用sendBroadcast()

:-异步广播

:-任何接收者都接收广播而不是任何特定命令

有序广播

:-使用sendOrderedBroadcast()

:-同步广播

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

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

本地广播

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

即时广播

:-在系统发送和处理常规广播意图后,该广播意图不再可用。

:-使用sendStickyBroadcast(Intent)

:-对应的意图是粘性的,这意味着您要发送的意图在广播完成后仍然存在。

:-因此,其他人可以通过registerReceiver(BroadcastReceiver,IntentFilter)的返回值快速检索该数据。

:-除此之外,它与sendBroadcast(Intent)相同。


非常有帮助..
Maher Abuthraa

10

sendbroadcast() -正常播放,但我们也可以设置优先级。

sendstickybroadcast()-与此一起传递的意图将对将来通过代码注册的用户(动态接收者)适用。广播将继续使用android,并将重新传送或重新广播,以接收来自任何广播接收器的将来请求

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

但是现在您不应该使用sendStickyBroadcast()不推荐使用的 方法

来自Android文档:

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

我希望这有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.