2010-05-12 21 views
7

Mam na myśli konfigurowanie globalnego, domyślnego programu obsługi wyjątków dla mojej aplikacji mobilnej (Android) (która używa składni Java) przy użyciu połączenia Thread.setDefaultUncaughtExceptionHandler(...). Zastanawiam się nad wyświetleniem okna alarmowego z odpowiednią wiadomością dla użytkownika.Obsługa globalnych wyjątków w języku Java

Czy są jakieś błędy, zastrzeżenia i zasady, które należy przestrzegać podczas ustawiania DefaultExceptionHandlers? Jakieś najlepsze praktyki, takie jak upewnienie się, że proces został zabity, śledzenie całego stosu jest zapisywane w dziennikach itp.?

Linki do dokumentacji, samouczków itp., Które mogą rzucić trochę światła na ten temat, są mile widziane.

Dzięki.

Odpowiedz

2
  • Nazwa jest nieco mylące, ponieważ stosując tę ​​metodę będzie ustawić domyślny program obsługi wyjątku dla wszystkich wątków.
  • Upewnij się, że wyjątki nie zostaną usunięte z obsługi wyjątku.
  • Jeśli robisz rzeczy GUI z obsługi wyjątków, upewnij się, że robisz to z właściwego wątku.
  • Nieprzechwycony wyjątek zatrzyma tylko wątek, w którym wystąpił wyjątek, jeśli to również spowoduje zakończenie procesu, zależy od innych wątków, które mogą być uruchomione.
+0

"Jeśli robisz rzeczy GUI z obsługi wyjątków, upewnij się, że robisz to z właściwego wątku." Co to znaczy? – Gratzi

+0

Oznacza to, że rzeczy w GUI powinny być wykonane w wątku EDT (w razie potrzeby za pomocą 'invokeLater '). W przeciwnym razie mogą się zdarzyć dziwne rzeczy. –

1

Jednym z możliwych problemów z tworzeniem globalnej procedury obsługi wyjątków może być utknięcie w pętli wyjątków - niektóre wyjątki będą wielokrotnie zgłaszane, chyba że program zostanie zakończony.

Jeśli masz na myśli to, że po zgłoszeniu wyjątku pojawi się komunikat, a aplikacja zostanie zakończona, wszystko będzie w porządku.

+0

Jeśli w mojej metodzie UncaughtException po prostu wyświetlam AlertDialog, czy Runtime automatycznie zabije/przerwie proces, czy będę musiał to jasno wyrazić? – Samuh

+0

Jeśli wyświetlasz AlertDialog w normalnym przepływie kodu, czy jest on automatycznie wyłączany? – Finbarr