我在android文档中遇到了这个词,并附带了定义
这些是广播,其数据在完成后由系统保留,因此客户端可以快速检索该数据,而不必等待下一个广播。
这是什么意思?有人可以举例说明它的用法吗?我相信我们必须请求使用此意图的许可吗?为什么这样?
<uses-permission android:name="android.permission.BROADCAST_STICKY"/> - Allows an application to broadcast sticky intents.
Answers:
如果活动onPause
以正常广播呼叫,则可能会错过接收广播的机会。启动粘性广播后,可以对其进行检查onResume
。
不推荐使用粘性广播。
API级别21中不推荐使用此方法。
不应使用粘性广播。它们不提供安全性(任何人都可以访问它们),不提供保护(任何人都可以修改它们)以及许多其他问题。推荐的模式是使用非粘性广播来报告已发生更改,并通过另一种机制让应用程序在需要时检索当前值。
Intent intent = new Intent("some.custom.action");
intent.putExtra("some_boolean", true);
sendStickyBroadcast(intent);
有关在Receiver's中的用法,请参阅removeStickyBroadcast(Intent)
API Level 5+上 isInitialStickyBroadcast()
的内容onReceive
。
sendStickyBroadcast()
执行sendBroadcast(Intent)
称为粘滞(sticky)的操作,即在广播完成后您要发送的Intent停留在周围,以便其他人可以通过返回值来快速检索该数据registerReceiver(BroadcastReceiver, IntentFilter)
。在其他所有方面,其行为与相同sendBroadcast(Intent)
。通过操作系统发送的粘性广播的一个示例是ACTION_BATTERY_CHANGED
。当您要求registerReceiver()
该操作(即使为null)时BroadcastReceiver
,您会获得该操作最后广播的Intent。因此,您可以使用它来查找电池的状态,而不必注册电池将来的所有状态变化。
Sticky broadcasts should not be used. They provide no security (anyone can access them), no protection (anyone can modify them), and many other problems. The recommended pattern is to use a non-sticky broadcast to report that something has changed, with another mechanism for apps to retrieve the current value whenever desired.