什么是粘性广播?

Sho*_*vik 86 android android-intent

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

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

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

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> - Allows an application to broadcast sticky intents.
Run Code Online (Sandbox Code Playgroud)

Pau*_*rke 107

请阅读Mark Murphy的解释: sendStickyBroadcast和Android中的sendBroadcast有什么区别

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

Intent intent = new Intent("some.custom.action");
intent.putExtra("some_boolean", true);
sendStickyBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

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

编辑:更多关于粘性广播...

还可以removeStickyBroadcast(Intent)在API Level 5 +上查看, isInitialStickyBroadcast()以便在Receiver中使用onReceive.

希望有所帮助.


Nar*_*ani 9

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


Lou*_*rda 8

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

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