LINUX.ORG.RU

Глобальный Exception Handler

 , ,


0

1

Хочу, чтобы все ошибки отлавливались глобальным обработчиком. Сделал как тут написано https://stackoverflow.com/questions/4427515/using-global-exception-handling-o...
Работает вроде, в него приходят исключения, но программа все равно завершается

Делаю тест в каком то куске кода

progressBar = null;
progressBar.setTitle(title);

соответсвенно генерируется исключение, которое попадает в Thread.UncaughtExceptionHandler
D/AndroidRuntime: Shutting down VM
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ProgressDialog.setTitle(java.lang.CharSequence)' on a null object reference
тут обработка uncaughtException
Application terminated


Если отлавливать явно
try {
    progressBar = null;
    progressBar.setTitle(title);
}catch (Exception e){

}


Тогда норм

★★★

Ответ на: комментарий от gobot

Это не мелкая ошибка. Сообщение содержит тонкий намёк на то, что надо бы её исправить.

Хочу, чтобы все ошибки отлавливались глобальным обработчиком.

Не даю вредных советов.

Partisan ★★ ()

Во-первых, надо читать документацию. UncaughtExceptionHandler вызывается, когда тред словил exception, который не смог обработать и сдох. Т.е. это такой post-mortem обработчик, который можно использовать, например, чтобы дополнительно залогировать ошибку.

Во-вторых, тебе правильно говорят, перехватывать все исключения - это антипаттерн, за такое в приличном обществе по рукам бьют. Как бы не все исключения имеет смысл перехватывать, например, получил ты OutOfMemory, перехватил, а дальше что будешь делать? Хорошим тоном считается перехватывать только то, что ты можешь исправить или знаешь что с этим делать.

В-третьих, твоя проблема решается тестированием, напиши нормальные unit-тесты, добавь по вкусу интеграционных.

hippi90 ★★★★ ()
Ответ на: комментарий от hippi90

а дальше что будешь делать

лог писать, отчёт отправлять

считается перехватывать только то, что ты можешь исправить

такое вообще кидать исключения не должно, их придумали как раз для неисправимых ошибок

anonymous ()
Ответ на: комментарий от anonymous

лог писать, отчёт отправлять

У тебя OutOfMemory, ты не можешь гарантировать, что ты сможешь создать еще объектов для отправки отчета.

такое вообще кидать исключения не должно, их придумали как раз для неисправимых ошибок

IOException

hippi90 ★★★★ ()