Идеальный способ установить глобального обработчика необработанных исключений в Android

Я хочу установить глобального обработчика необработанных исключений для всех потоков в моем приложении Android. Так, в моем Application разделите на подклассы я установил реализацию Thread.UncaughtExceptionHandler как обработчик по умолчанию для неперехваченных исключений.

Thread.setDefaultUncaughtExceptionHandler(
                new DefaultExceptionHandler(this));

В моей реализации я пытаюсь отобразиться AlertDialog отображение соответствующего сообщения об исключении.

Однако это, кажется, не работает. Каждый раз, когда, исключение выдается для любого потока, который идет необработанный, я получаю запас, диалоговое окно по умолчанию ОС ("Извините! Диалоговое окно-Application-has-stopped-unexpectedly").

Каков корректный и идеальный способ установить обработчик по умолчанию для неперехваченных исключений?

85
задан Idolon 7 May 2012 в 14:42
поделиться

2 ответа

Это все, что вам нужно сделать. (Убедитесь, что вы остановили процесс позже - все может быть в неопределенном состоянии.)

Первое, что нужно проверить, - это все еще вызывается обработчик Android. Возможно, ваша версия вызывается, но завершается неудачно, и system_server показывает общий диалог, когда видит сбой процесса.

Добавьте несколько сообщений журнала вверху обработчика, чтобы увидеть, попадает ли он туда. Распечатайте результат getDefaultUncaughtExceptionHandler, а затем выбросьте неперехваченное исключение, чтобы вызвать сбой. Следите за выводом logcat, чтобы узнать, что происходит.

24
ответ дан 24 November 2019 в 08:23
поделиться

Я думаю, чтобы отключить это в вашем методе uncaughtException(), не вызывающий previousHandler.uncaughtException(), где previousHandler установлен

previousHandler = Thread.getDefaultUncaughtExceptionHandler();
3
ответ дан 24 November 2019 в 08:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: