Szukałem idealnej architektury aplikacji na Androida i przeczytałem kilka świetnych blogów na ten temat.Magistrala zdarzeń i cykl życia komponentów Android UI
1) http://www.mdswanson.com/blog/2014/04/07/durable-android-rest-clients.html
2) http://birbit.com/a-recipe-for-writing-responsive-rest-clients-on-android/
Oba posty opisać jak wykorzystać autobus zdarzeń dla komunikacji między komponentami Androidem (aktywność fragmenty, serwis).
Jeden, ale bardzo ważny temat nie został uwzględniony. Jak obsługiwać zdarzenia, które zostały opublikowane w komponentach interfejsu użytkownika, gdy zostały wstrzymane.
Na przykład: usługa publikuje wydarzenie po zakończeniu pobierania danych do działania. I w tej chwili aktywność jest wstrzymana. Ponieważ autobus zdarzeń jest wyrejestrowywany w funkcji onPause(), całkowicie tracimy to wydarzenie.
EvenBus z greendao oferuje stickyevents. Ale mogą one spowodować wycieki pamięci, jeśli nie zostaną usunięte.
Otto z kwadratu wprowadza wzór "Producer", który można wykorzystać zamiast lepkich zdarzeń.
Pierwsze rozwiązanie może spowodować wycieki pamięci, jeśli losowe zdarzenie nie zostanie usunięte ręcznie.
Druga wymaga przechowywania danych w dowolnym miejscu do czasu, a metoda producenta zwróci je subskrybentom. To rozwiązanie wydaje się bardziej poprawne, ale wymaga napisania więcej kodu.
Czy ktoś mógłby podzielić się pomysłami, jak rozwiązać ten skrajny przypadek? Wszelkie czyste rozwiązania?
to jest coś, co również chciałbym wiedzieć. czy znalazłeś już satysfakcjonującą odpowiedź? – stefs
Próbowałem sobie z tym poradzić. Stworzyłem obiekt mediatora aplikacji (dla większych aplikacji może to być podzielone na wiele mediatorów), obiekt mediatora ma słabe odniesienie do aktualnie używanego działania, aktywność jest ustawiana i unieważniana po wznowieniu i wstrzymaniu.Po wywołaniu zdarzenia mediator odbiera zdarzenie, zapisuje wynik w pamięci podręcznej danych sesji, a następnie kolejkuje polecenie odpowiadające na zdarzenie, które zostanie wykonane teraz lub gdy zostanie wznowione prawidłowe działanie. Chciałbym usłyszeć, że ktoś ma na to ochotę. – serenskye