2011-07-18 44 views

回答

8

我相信你是问,如果有任何的方式来保证每个感兴趣的接收器将获得广播B.最好的答案我可以给的是,它极有可能之前接收其相应的广播A,因为所有的广播传递给应该依次处理它们的ActivityManager。但我不相信框架中有什么能够“保证”这种行为(我无法在ActivityManager上找到所有发布的队列或类似的东西)。此外,BroadcastReceiver一次只能处理一个意图,这有所帮助。

如果您的意思是“我可以控制发送每个广播的接收器的顺序”,那么您的答案就是sendOrderedBroadcast(),正如其他人所避免的。

+0

只是出于好奇,你没有这个答案的任何更新,是吗?我现在对同样的事情非常好奇。谢谢! – Patrick87

-1

您可能需要使用sendOrderedBroadcast(如果您有这个控制),以保证秩序。

+1

虽然我能看到的混乱,不幸的是,这不是因为'sendOrderedBroadcast'provides确保给定的单个广播的装置的由接收机中消耗的一个解决方案优先顺序。不幸的是,与保持多个独立广播的接收顺序无关,这就是问题所在。 – Trevor

0

您可能对广播所作的行为检查,如果不存在,直到发生了不使用B钮?所以他们可能会被收回,但仍然正确行事?

+0

如何检查广​​播的行为?这是由接收器完成的吗?谢谢。 –

+0

这种思想的变型可能是该广播发送机插入它发送每个广播的'Intent'内的递增的序列号。通过这种方式,接收机可以检测连续广播是否以不同的顺序收到,并采取适当的行动。这可能是一个很好的使用安全带和安全措施,直到有人证明Android系统保证顺序(这会更好)。 – Trevor

3

关于这个问题,一些更多的信息可以在这里找到:

广播接收机执行。
https://groups.google.com/forum/#!topic/android-developers/ClIGNuGJUts


在上述链路戴安Hackborn写入...

“特定的接收机只能一次处理一个广播,作为每个广播情况发生时,它被处理以确定目标应该到达,并发送到每个目标的消息队列中,当发送稍后的广播时,通常不会在队列之前移动。最重要的ent广播你成为屏幕的当前状态。一旦一切都安定下来。你可以不依赖于任何其他的广播,或者也可以接收广播等广播接收机订货。”


本文建议可能使用sendBroadcastSync()进行同步交付使用,但不能保证。

Does LocalBroadcastManager deliver events in the order in which the events wer sent?

+0

这应该是upvoted和接受的答案,因为它有正式的参考。 – Blaisorblade