Если 2 трансляции, A и B и отправленные в этом порядке, поддерживает ли Android, что все заинтересованные получатели получат их в том же порядке?
Получены ли заказы на Android?
Ответ 1
Я полагаю, вы спрашиваете, есть ли какой-либо способ гарантировать, что каждый заинтересованный получатель получит свою соответствующую трансляцию A до получения трансляции B. Лучший ответ, который я могу дать, - это то, что это очень вероятно, потому что все трансляции передаются в ActivityManager
, который должен обрабатывать их по очереди. Но я не верю, что есть что-то в рамках, которое "гарантирует" это поведение (я не могу найти очередь на ActivityManager, где они все размещены или что-то в этом роде). Кроме того, BroadcastReceiver
будет обрабатывать только одно намерение за раз, что помогает.
Если вместо этого вы имели в виду "могу ли я контролировать порядок приемников, в которых передается каждая передача", тогда ваш ответ лежит на sendOrderedBroadcast()
, как другие не ускользнули.
Ответ 2
Более подробную информацию об этом вопросе можно найти здесь:
Выполнение широковещательного приемника.
https://groups.google.com/forum/#!topic/android-developers/ClIGNuGJUts
В приведенной выше ссылке Dianne Hackborn пишет...
"Конкретный приемник может обрабатывать только одну широковещательную рассылку одновременно. По мере того, как происходит каждая трансляция, она обрабатывается для определения целей, к которым она должна идти, и отправляется в очередь сообщений для каждой цели. Когда передается более поздняя передача, он, как правило, не будет перемещен впереди очереди.
Для широковещательных трансляций на экране вы можете полагаться на самую последнюю трансляцию, которую вы получаете, являясь текущим состоянием экрана. как только все уладится. Вы не можете полагаться на заказы с любыми другими трансляциями или другими вещательными приемниками, которые также могут получать трансляции.
В этой статье предлагается использовать sendBroadcastSync() для синхронной доставки, но это не гарантируется.
Сообщает ли LocalBroadcastManager события в том порядке, в котором были отправлены события?
Ответ 3
Вы можете проверить поведение для трансляции A, а если нет, не используйте B до тех пор, пока не произойдет A? Таким образом, они могут быть получены назад, но все равно действуют правильно?
Ответ 4
Возможно, вы захотите использовать sendOrderedBroadcast (если у вас есть контроль над этим), чтобы гарантировать порядок.