uncaughtException вызывается несколько раз

я относительно новичок в stackoverflow.

Я реализовал собственный обработчик uncaughtException в своем приложении для Android. Проблема в том, что метод uncaughtException вызывается несколько раз, когда в одном из моих действий возникает одно необработанное исключение.

Вот весь мой класс, отвечающий за обработку неперехваченного исключения:

public class CustomUncaughtExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {

 private UncaughtExceptionHandler defaultUEH;
public CustomUncaughtExceptionHandler(UncaughtExceptionHandler defaultHandler) {

    defaultUEH = defaultHandler;
    Log.w("cmhandler","setted default UEH");
}

public void uncaughtException(Thread thread, Throwable exception) {
    Log.w("cmhandler","uncaughtException");
    Helper.Log_e("CustomUncaughtExceptionHandler", "uncaughtException", exception);

    defaultUEH.uncaughtException(thread, exception);
}

}

Строка Helper.Log_e("CustomUncaughtExceptionHandler", "uncaughtException", exception); сохраняет исключение только в файле и там, где исключений не возникает.

Я реализовал класс в своей деятельности следующим образом:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Thread.setDefaultUncaughtExceptionHandler(new CustomUncaughtExceptionHandler(Thread.getDefaultUncaughtExceptionHandler()));

Когда я запускаю свое приложение и вставляю что-то подобное в oncreate действия (после приведенного выше кода)

String i = null;
    i.length();

Исключение обрабатывается правильно, а также всплывает диалоговое окно FC. Пока все хорошо, но после просмотра моих журналов я вижу, что метод uncaughtException вызывается несколько раз.

РЕДАКТИРОВАТЬ: Обычно метод вызывается 2-6 раз, а лог из настроек defaultUEH появляется в логах только один раз.

У кого-нибудь еще было такое поведение? Или у кого-нибудь есть намек на то, что я делаю неправильно?

Спасибо, с уважением schw4ndi


person schw4ndi    schedule 27.02.2013    source источник


Ответы (1)


Моя ошибка заключалась в том, что я установил обработчик Exceptino по умолчанию в активности evrey в onCreate, поэтому, вызвав getDefaultExceptionHandler, я получаю ранее установленный customExceptionHandler.

Теперь я решил это, превратив класс в синглтон. Таким образом, обработчик по умолчанию устанавливается только один раз.

person schw4ndi    schedule 28.02.2013