如果2个广播,A和B,并按顺序发送,Android是否保证所有感兴趣的接收者都会以相同的顺序接收它们?
答案 0 :(得分:9)
我相信你问是否有任何方法可以保证每个感兴趣的接收者在获得广播B之前都会收到相应的广播A.我能给出的最佳答案是很有可能,因为所有广播都传递给ActivityManager
应该依次处理它们。但是我不相信框架中有任何“保证”这种行为的东西(我在ActivityManager上找不到它们全部发布的队列或类似的东西)。此外,BroadcastReceiver
一次只能处理一个Intent,这会有所帮助。
如果你的意思是“我可以控制发送每个广播的接收者的顺序”,那么你的答案就在于sendOrderedBroadcast()
,而其他人已经不知道了。
答案 1 :(得分:4)
有关此问题的更多信息,请点击此处:
广播接收器执行。
https://groups.google.com/forum/#!topic/android-developers/ClIGNuGJUts
在上面的链接中,Dianne Hackborn写道......
“一个特定的接收者一次只能处理一个广播。当每个广播发生时,它被处理以确定它应该去的目标,并被分派到每个目标的消息队列中。当稍后的广播被发送时,它通常不会移到队列之前。
对于屏幕开/关广播,您可以依赖最近的广播,您将获得当前的屏幕状态。一切都安定下来了。您不能依赖与任何其他广播或其他可能也接收广播的广播接收机的订购。“
本文建议使用sendBroadcastSync()进行同步传送,但不保证。
Does LocalBroadcastManager deliver events in the order in which the events wer sent?
答案 2 :(得分:0)
您可以检查广播A的行为,如果不存在,请不要在A发生之前使用B?所以他们可能会被收到倒退,但仍然可以正常行动?
答案 3 :(得分:-1)
您可能希望使用sendOrderedBroadcast(如果您对此有控制权)来保证订单。