Android 安卓广播是否按顺序接收?

Android 安卓广播是否按顺序接收?,android,Android,如果有两个广播,A和B,并按该顺序发送,Android是否保证所有感兴趣的接收者都将按相同的顺序接收它们?您可能希望使用sendOrderedBroadcast(如果您可以控制此功能)为了保证秩序。我想你是在问,是否有任何方法可以保证每个感兴趣的接收者在获得广播B之前都会收到各自的广播A。我能给出的最佳答案是,这很有可能,因为所有广播都会传递给活动管理器,后者应该依次处理。但我不相信框架中有任何东西可以“保证”这种行为(我在ActivityManager上找不到一个队列,它们都发布在那里或类似的

如果有两个广播,A和B,并按该顺序发送,Android是否保证所有感兴趣的接收者都将按相同的顺序接收它们?

您可能希望使用sendOrderedBroadcast(如果您可以控制此功能)为了保证秩序。

我想你是在问,是否有任何方法可以保证每个感兴趣的接收者在获得广播B之前都会收到各自的广播A。我能给出的最佳答案是,这很有可能,因为所有广播都会传递给
活动管理器
,后者应该依次处理。但我不相信框架中有任何东西可以“保证”这种行为(我在ActivityManager上找不到一个队列,它们都发布在那里或类似的地方)。另外,
BroadcastReceiver
一次只处理一个意图,这很有帮助


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

您可以对广播A进行行为检查,如果没有,在A发生之前不要使用B?因此,它们可能会被向后接收,但仍能正确执行?

有关此问题的更多信息,请参见此处:

广播接收机执行。


在上面的链接中,Dianne Hackborn写道

“特定的接收器一次只能处理一个广播。每次广播发生时,都会对其进行处理,以确定它应该到达的目标,并将其发送到每个目标的消息队列中。当发送稍后的广播时,通常不会将其移到队列的前面。”

对于屏幕开/关广播,您可以依赖于您获得的最新广播,即屏幕的当前状态。一旦一切都解决了,您就不能依赖于与任何其他广播或其他可能也在接收广播的广播接收器一起订购。”


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


如何检查广播的行为?这是由接收者完成的吗?谢谢。这个想法的一个变体可能是广播发送者在其发送的每个广播的
意图
中插入一个递增的序列号。这样,接收机可以检测到连续广播是否以与发送顺序不同的顺序接收,并采取适当的措施。这可能是一个很好的安全措施,除非有人证明安卓系统能保证秩序(这会更好),不幸的是,这不是一个解决方案,因为
sendOrderedBroadcast
提供了一种方法来确保给定的单个广播按优先级顺序被接收器使用。不幸的是,这与保留多个单独广播的接收顺序无关,这正是问题所涉及的。只是出于好奇,您没有关于此答案的任何更新,是吗?我现在对同样的事情很好奇。谢谢这应该是经过投票表决并被接受的答案,因为它有官方参考。