Android - elegancka obsługa wyjątków

0

Zastanawiam się jak najlepiej podejść do problemu wyświetlania komunikatów o błędach na androidzie.

Przejdę od razu do przykładu.

Powiedzmy, że piszę sobie klienta GG na androida. Kiedy wystąpi błąd z połączeniem chciałbym wyświetlić odpowiednie okienko, np. wywołując funkcję myActivity.showError();

Projekt ma prostą strukturę: obiekt myActivity typu Activity posiada obiekt typu GGService (udostępniający funkcje do wysyłania wiadomości itd.), który z kolei posiada obiekt typu GGConnection (połączenie).

Pytanie jest proste i brzmi: jaki jest najlepszy sposób na przekazanie błędu z klasy GGConnection do Activity (w celu wyświetlenia komunikatu użytkownikowi)?

Mi nasunęły się 2 rozwiązania:
1. Rzucam wyjątek w GGConnection, nie łapię go w GGService i leci sobie aż do Activity, gdzie łapię go i wyświetlam błąd.

2. Trzymam referencję do Activity w klasie GGConnection.

Niestety oba rozwiązania są co najmniej nieładne:
1. W podanym przykładzie może jeszcze ujdzie, ale w bardziej skomplikowanym systemie taki wyjątek musiałby przelecieć przez kilka lub wiecej obiektów - raczej bez sensu.

2. Rozwiązanie prostsze niż to pierwsze, ale jakoś wydaje mi się niepoprawne, żeby taka "niskopoziomowa" klasa trzymała referencję od Activity.
Zapewne istnieje jakaś reguła OOP, która w tym przypadku zostałaby naruszona.

Mam nadzieję, że jasno pokazałem o co mi chodzi.
Dzięki za pomoc!

0

Nie trzymaj referencji do aktywności (tym bardziej jeśli może być ona w aplikacji zamykana i otwierana kilka razy). Ewentualnie WeakReference jeżeli musisz. Zamiast tego zobacz EventBus (trochę więcej możliwości niż Otto) albo Otto (szyny zdarzeń pozwalające na wysyłanie klas-wiadomości w aplikacji pomiędzy nie powiązanymi ze sobą komponentami). Więc zamiast trzymać referencję możesz za pomocą takiej szyny wysłać wiadomość o jakimś zdarzeniu (np. błędzie) do aktywności/fragmentu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1