2011-07-18 8 views

Respuesta

8

Creo que está preguntando si hay alguna manera de garantizar que cada receptor interesado reciba su respectiva Difusión A antes de recibir la Difusión B. La mejor respuesta que puedo dar es que es muy probable, porque todas las transmisiones se pasan a el ActivityManager que debería manejarlos a su vez. Pero no creo que haya nada en el marco que "garantice" este comportamiento (no puedo encontrar una cola en ActivityManager donde están todos publicados o algo así). Además, BroadcastReceiver solo manejará un intento a la vez, lo que ayuda.

Si en lugar de eso quiere decir "¿puedo controlar el orden de los receptores en los que se envía cada emisión?", Entonces su respuesta se encuentra en sendOrderedBroadcast(), como otros han eludido.

+0

Solo por curiosidad, no tienes ninguna actualización para esta respuesta, ¿o sí? Tengo mucha curiosidad sobre lo mismo en este momento. ¡Gracias! – Patrick87

-1

Es posible que desee utilizar sendOrderedBroadcast (si tiene el control de esto) para garantizar el pedido.

+1

Aunque puedo ver que la confusión es, por desgracia, esto no es una solución porque 'sendOrderedBroadcast'provides un medio para asegurar una sola emisión dada es consumida por los receptores en una orden de prioridad Desafortunadamente, no tiene nada que ver con la preservación del orden en que se reciben múltiples transmisiones por separado, que es a lo que se refiere la pregunta. – Trevor

0

Usted podría tener la verificación de comportamiento para la transmisión A y si no está allí, no use B hasta que ocurra A? ¿Entonces podrían ser recibidos al revés, pero aún así actuaron correctamente?

+0

¿Cómo se comprueba el comportamiento de la transmisión? ¿Esto lo hace el receptor? Gracias. –

+0

Una variación de esta idea podría ser que el emisor de difusión inserta un número de secuencia creciente dentro del 'Intento' de cada emisión que envía.De esta forma, los receptores pueden detectar si las transmisiones consecutivas se recibieron en un orden diferente al que se transmitieron y tomar las medidas apropiadas. Esta podría ser una buena medida de seguridad con correas y abrazaderas, hasta que alguien pruebe que el sistema Android garantiza el orden (lo que sería mejor). – Trevor

3

Algunos más información sobre este tema se puede encontrar aquí:

ejecución Receptor de radio.
https://groups.google.com/forum/#!topic/android-developers/ClIGNuGJUts


En el enlace de arriba escribe Dianne Hackborn ...

"Un receptor particular sólo puede procesar una emisión a la vez. Como sucede cada emisión, se procesa para determinar la objetivos a los que debe ir y enviados a la cola de mensajes para cada destino. Cuando se envía una transmisión posterior, generalmente no se moverá antes de la cola.

Para las transmisiones de encendido/apagado de la pantalla, puede confiar en el más rec En la emisión, se obtiene el estado actual de la pantalla. una vez que todo se haya establecido. No se puede confiar en el pedido con otras transmisiones, u otros receptores de radiodifusión, que también pueden estar recibiendo las transmisiones."


Este artículo sugiere que posiblemente usando sendBroadcastSync() para la entrega síncrona, pero no está garantizada.

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

+0

Esta debe ser la respuesta votada y aceptada, ya que tiene referencias oficiales. – Blaisorblade

Cuestiones relacionadas