2011-07-18 39 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