什么是粘性广播?

时间:2010-08-16 05:59:19

标签: android android-intent

我在Android文档中遇到了这个术语,附带定义

  

这些是数据在完成后由系统保存的广播,因此客户端可以快速检索该数据而无需等待下一次广播。

这是什么意思?有人可以用特定的例子详细说明它的用法吗?我相信我们必须要求获得使用此意图的许可吗?为什么这样?

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> - Allows an application to broadcast sticky intents.

5 个答案:

答案 0 :(得分:101)

请在此处阅读Mark Murphy的解释: what is the difference between sendStickyBroadcast and sendBroadcast in Android

以下是一个如何使用粘性广播的抽象示例:

Intent intent = new Intent("some.custom.action");
intent.putExtra("some_boolean", true);
sendStickyBroadcast(intent);

如果您正在冻结的活动(onPause)中收听此广播,您可能会错过实际的活动。这允许您在触发广播后检查广播(onResume)。

编辑:有关粘性广播的更多内容......

另请查看removeStickyBroadcast(Intent),以及API级别5 + isInitialStickyBroadcast(),以便在接收方的onReceive中使用。

希望有所帮助。

答案 1 :(得分:21)

请注意,Sticky广播对系统很重,不鼓励。请在Android开发者小组的'Sticky Broadcasts and Concurrency Options'讨论中阅读hackbod的说明。

@Shouvik,请指明您考虑使用StickyBroadcasts的确切场景。有人可能会提出替代解决方案。

答案 2 :(得分:8)

sendStickyBroadcast()执行称为粘性的sendBroadcast(Intent),即您发送的意图在广播完成后保持不变,以便其他人可以通过{{1}的返回值快速检索该数据}。在所有其他方面,这与registerReceiver(BroadcastReceiver, IntentFilter)的行为相同。通过操作系统发送的粘性广播的一个示例是sendBroadcast(Intent)。当您为该操作调用ACTION_BATTERY_CHANGED时 - 即使使用空registerReceiver() - 您将获得上次为该操作广播的Intent。因此,您可以使用它来查找电池的状态,而无需注册电池中所有未来的状态更改。

答案 3 :(得分:8)

粘性广播的值是上次广播的值,当前保存在粘性缓存中。这不是现在收到的广播的价值。我想你可以说它就像一个浏览器cookie,你可以随时访问。粘性广播现已弃用:

  

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

答案 4 :(得分:2)

系统发送和处理后,普通广播Intent不再可用。如果你使用sendStickyBroadcast(Intent)方法,那么意图是粘性的,这意味着你发送的意图在广播完成后保持不变。

您可以参考我的博客:enter link description here