什么是即时广播?


89

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

这些是广播,其数据在完成后由系统保留,因此客户端可以快速检索该数据,而不必等待下一个广播。

这是什么意思?有人可以举例说明它的用法吗?我相信我们必须请求使用此意图的许可吗?为什么这样?

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

3
2019年2月8日,对于搜索粘性广播并在此处结束的任何人,摘自官方文档 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.
fangzhzh

Answers:


110

如果活动onPause以正常广播呼叫,则可能会错过接收广播的机会。启动粘性广播后,可以对其进行检查onResume

更新6/23/2020

不推荐使用粘性广播。

请参阅sendStickyBroadcast文档

API级别21中不推荐使用此方法。

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

实行

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

资源资源


嗨,我对静态广播和静态广播感到困惑。我只是在某处读到,在清单文件中注册广播和以编程方式注册之间的区别仅在于,另外一个不注销广播,而是保留在那里,而下一个在onPause()方法中注销广播。
Shaista Naaz

注意:在大多数情况下,应避免粘性广播。有关更多信息,请参见@Nikhil_Katre的答案中的链接
gMale

@Shaista:清单接收器即使在您的应用处于休眠状态也能运行,而编程接收器仅在其所注册的应用正在运行时才响应
gMale 2014年

@gmale所以,如果我们的活动,我们在的onPause(),我们呼吁unregisterReceiver()。我们会得到我们在恢复的onResume(广播)
Kushal

1
@PaulBurke 在上面的给定链接中我没有找到马克·墨菲的名字。此链接将我重定向到问题,而不是确切的答案。您能更新网址吗?
Vishal Chhodwani

11

sendStickyBroadcast()执行sendBroadcast(Intent)称为粘滞(sticky)的操作,即在广播完成后您要发送的Intent停留在周围,以便其他人可以通过返回值来快速检索该数据registerReceiver(BroadcastReceiver, IntentFilter)。在其他所有方面,其行为与相同sendBroadcast(Intent)。通过操作系统发送的粘性广播的一个示例是ACTION_BATTERY_CHANGED。当您要求registerReceiver()该操作(即使为null)时BroadcastReceiver,您会获得该操作最后广播的Intent。因此,您可以使用它来查找电池的状态,而不必注册电池将来的所有状态变化。


8

即时广播的值是上次广播的值,当前保留在即时缓存中。这不是当前接收到的广播的值。我想您可以说它就像您可以随时访问的浏览器cookie。现在,对于粘性广播方法(例如)的文档,粘性广播已被弃用:

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


3

系统发送并处理完常规广播意图后,该广播意图不再可用。如果使用sendStickyBroadcast(Intent)方法,则该Intent是粘性的,这意味着您要发送的Intent在广播完成后仍然存在。

您引用我的博客:在此处输入链接描述


1
我已添加了您所链接博客的作者身份的必填信息。您必须立即执行此操作,否则您的帖子可能会被删除为垃圾邮件。
安德鲁·巴伯
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.