2011-07-18 10 views

Odpowiedz

8

Wydaje mi się, że pytasz, czy istnieje jakikolwiek sposób zagwarantowania, że ​​każdy zainteresowany odbiorca otrzyma odpowiednią emisję A przed emisją. Najlepszą odpowiedzią, jaką mogę dać, jest to, że jest bardzo prawdopodobne, ponieważ wszystkie transmisje są przekazywane do ActivityManager, który powinien obsługiwać je po kolei. Ale nie wierzę, że jest coś w strukturze, która "gwarantuje" to zachowanie (nie mogę znaleźć kolejki w ActivityManager, gdzie wszystkie są opublikowane lub coś w tym stylu). Ponadto, BroadcastReceiver obsłuży tylko jedną intencję naraz, co pomaga.

Jeśli zamiast tego miałeś na myśli "czy mogę kontrolować kolejność odbiorników, w których wysyłana jest każda transmisja", to twoja odpowiedź spoczywa na sendOrderedBroadcast(), o ile inni nie uniknęli.

+0

Po prostu z ciekawości, nie masz żadnych aktualizacji dla tej odpowiedzi, prawda? W tej chwili jestem bardzo ciekawa tego samego. Dzięki! – Patrick87

-1

Możesz chcieć użyć sendOrderedBroadcast (jeśli masz nad tym kontrolę), aby zagwarantować zamówienie.

+1

Choć widzę, gdzie jest zamieszanie, niestety nie jest to rozwiązanie, ponieważ 'sendOrderedBroadcast'provides środkami zapewniającymi daną pojedynczą transmisję jest zużywana przez odbiorniki w sposób priorytetowe zamówienie. Nie ma to niestety nic wspólnego z zachowaniem porządku, w którym odbierane są różne, odrębne audycje, do których to pytanie się odnosi. – Trevor

0

Możesz sprawdzić zachowanie A, a jeśli go nie ma, nie używaj B, dopóki nie wystąpi A? Więc mogą być odbierane do tyłu, ale nadal działały prawidłowo?

+0

Jak sprawdzić zachowanie transmisji? Czy robi to odbiornik? Dzięki. –

+0

Wariacją na temat tego pomysłu może być to, że nadawca nadaje inkrementując numer sekwencji w ramach "intencji" każdej emisji, którą wysyła.W ten sposób odbiorcy mogą wykryć, czy kolejne transmisje zostały odebrane w innej kolejności niż ta, w której zostały przesłane, i podjąć odpowiednie działania. Może to być dobry środek bezpieczeństwa na pasie i szelkach, dopóki ktoś nie udowodni, że system Android gwarantuje porządek (który byłby lepszy). – Trevor

3

trochę więcej informacji na temat tej kwestii można znaleźć tutaj:

Broadcast wykonanie odbiornika.
https://groups.google.com/forum/#!topic/android-developers/ClIGNuGJUts


W powyższym linku Dianne Hackborn pisze ...

„Szczególnym odbiornik może przetwarzać tylko jedną transmisję w danej chwili. Ponieważ każda transmisja dzieje, jest on przetwarzany w celu określenia cele, do których powinien trafić i które są wysyłane do kolejki komunikatów dla każdego celu.Jeśli późniejsza transmisja zostanie wysłana, zwykle nie będzie ona przesuwana przed kolejką.Na przykład:

Dla ekranów włączania/wyłączania, możesz polegać na najbardziej rec Po nadaniu będziesz aktualny stan ekranu. gdy wszystko się uspokoi. Nie można polegać na składaniu zamówienia z innych audycji lub innych odbiorników, które mogą być również otrzymujących transmisje.”


Ten artykuł sugeruje, ewentualnie stosując sendBroadcastSync() dla synchronicznego dostawy, ale nie jest gwarantowana.

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

+0

Powinna to być przegłosowana i zaakceptowana odpowiedź, ponieważ ma oficjalne referencje. – Blaisorblade

Powiązane problemy