什么是便利广播?

问题描述:

我碰到这个词附带的Android文档在结合定义什么是便利广播?

这些都是广播其数据由系统完成后召开,使客户能够快速检索数据,而不必等待下一个广播。

这是什么意思?有人可以用一个特定的例子来阐述它的用法吗?我相信我们必须要求使用此意图的许可?为什么这样?

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

请点击这里阅读马克·墨菲解释: 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使用。

希望有所帮助。

+0

嗨,我感到困惑粘滞广播静态注册的广播。我刚刚在某处看到,在清单文件中注册广播和以编程方式注册的区别仅在于进一步注销广播但它停留在那里,而后者在onPause()方法中注销广播。 – 2011-04-25 06:05:46

+0

注意:在大多数情况下,应避免粘性广播。请参阅[@Nikhil_Katre答案中的链接](http://groups.google.com/group/android-developers/browse_thread/thread/f37e3549a5e1be66?pli=1)以获取更多信息 – gMale 2014-07-05 20:02:48

+0

@Shaista:清单接收器即使在你的应用程序处于休眠状态,而程序接收器仅在其注册的应用程序正在运行时才会响应 – gMale 2014-07-05 20:07:02

请注意,粘滞广播在系统中很重,不鼓励。请在Android开发人员小组的'Sticky Broadcasts and Concurrency Options'讨论中阅读hackbod的注意事项。

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

+0

+1中指出了粘性广播的缺点,更不用说如果你的应用程序崩溃了(是的,即使你用try/catch包装了所有东西并注册了一个'Thread.setDefaultUncaughtExceptionHandler() '),你坚持在下次调用时必须小心处理的事情。简而言之,就像SharedPreferences和ContentProvider一样,它可能很繁琐而且过于复杂。 – ateiob 2012-08-07 21:50:41

+0

通过“沉重的系统”你的意思是它可以减慢速度?这种放缓何时出现?在应用程序,甚至没有运行它? Adobe AIR应用程序需要获得此权限,所以如果编程AIR应用程序,这是您无法避免的。如果您将AIR运行时嵌入到应用程序中,或者让用户安装要求获得此权限的Adobe AIR运行时,您可以在应用程序中询问这一点。 – OMA 2012-09-12 14:19:47

+0

下面是我试图完成的一个场景,并且想知道粘性广播是否会完成。我需要为内存中的服务维护状态,即使服务被终止,并且不触及任何外部资源(如闪存)。我可以做到这一点没有粘性,但遇到并发问题更新状态,如果意图交付回来。 – Michael 2013-06-02 04:13:32

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

你是指我的博客:enter link description here

+1

我已经添加了您要链接到的博客的作者身份的必要信息。你*必须*从现在开始做这件事,否则你的帖子可能被删除为垃圾邮件。 – 2012-10-30 13:56:24

sendStickyBroadcast()执行被称为粘一个sendBroadcast(Intent),即意向您发送入住后各地广播完毕后,让其他人可以快速通过的返回值检索数据registerReceiver(BroadcastReceiver, IntentFilter)。在所有其他方面,这与sendBroadcast(Intent)的行为相同。通过操作系统发送的粘性广播的一个示例是ACTION_BATTERY_CHANGED。当您为该动作致电registerReceiver() - 即使为空BroadcastReceiver - 您将获得上次为该动作播出的意图。因此,您可以使用它来查找电池的状态,而无需注册电池中所有将来的状态变化。

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

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

+1

链接到引用的文档将非常有帮助。 – 2017-09-19 10:06:35

+0

不记得引用的文档。不知道这是可怜的礼仪,但现在我可以清楚地看到为什么。 Def从某处复制并粘贴。 – 2017-09-20 16:44:33