2012-01-16 75 views
0

我想知道关于广播的一件事。活动更换期间丢失广播

如果我有两个活动A和B.同时我也有广播接收器在两个活动的onResume()和onPause()中注册。 如果我在一个活动暂停但其他尚未恢复时收到通知,该怎么办?我的广播会丢失吗?

和subquestion是我可以在这种情况下使用粘性广播吗?

回答

0

我目前处于和你一样的状况,并与粘滞广播一起工作。

根据文档,在广播完成后,Sticky广播将停留在附近。因此,如果有任何活动处于暂停恢复周期(方向更改),您将在onResume()中注册您的接收器后通知您这些广播。

要小心,虽然这些广播,因为他们会留在“永远”,如果你不用removeStickyBroadcast(matchingIntent)解雇他们,并可以再次捕捉他们,如果活动再次恢复。

发送持久广播与sendStickyBroadcast()

removeStickyBroadcast()取下粘播出。

此外,您需要在您的Manifest上获得BROADCAST_STICKY许可;加入<manifest>标签:

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> 
+0

谢谢,安德烈斯。看了这个[线索](http://groups.google.com/group/android-developers/browse_thread/thread/f37e3549a5e1be66)后,我有点困惑,特别是最后一篇文章。关于需要使用粘性广播的声明仅用于交叉应用调用看起来很有说服力。 – Ivan 2012-01-19 22:10:52

+1

我在用粘性广播进行测试期间阅读了同一篇文章。作为文章细节,如果广播意图与动作,数据,类别和类型相匹配,则粘性广播将被替换。如果您离开这些字段并更改意向附加功能,您将始终拥有最新的最新广播。 广播通过所有系统发送,因此您最好将您的包名作为前缀附加到您的意图操作中,以防止其他应用程序捕获它们。示例:intent.setAction([PACKAGE_NAME] .update)。 – Andres 2012-01-23 19:25:09

+0

这是发布此答案时的有效解决方案,但粘性广播现已弃用,因为Lollipop API 21。 – Sufian 2015-10-14 09:59:33