отправка отчета о сбое по электронной почте с использованием DefaultExceptionHandler

задний план

Я пытаюсь зафиксировать все сбои и разрешить пользователю отправлять собственный отчет об ошибках по электронной почте.

это очень временное решение, так как мне нужно отправить журналы приложения и другую информацию. он не предназначен для отправки конечным пользователям. только очень маленькая группа тестировщиков.

как это работает

в любом случае, я создал класс, который расширяется от java.lang.Thread.UncaughtExceptionHandler и имеет функцию uncaughtException(). я регистрируюсь в нем с помощью Thread.setDefaultUncaughtExceptionHandler(), и он действительно отлавливает сбои.

функция сохраняет некоторые данные во внешнем хранилище и сразу же открывает приложение электронной почты (gmail) для отправки отчета о сбое.

проблема

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

Я пробовал несколько комбинаций:

  • Система.выход(0)
  • android.os.Process.killProcess(android.os.Process.myPid());
  • вызов UncaughtExceptionHandler по умолчанию.

ни один не работал. он закрывает приложение, но как только закрывает приложение электронной почты, приложение перезапускается

я также не могу понять, как делать вещи, которые работают в потоке пользовательского интерфейса при захвате сбоев (например, тосты, диалоги и т. д.).

другое решение, которое я пробовал, - это открытие новой активности, которая отправит отчет о сбое. к сожалению, приложение даже не начало свою деятельность.

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

Я искал здесь (на SO) решение и нашел несколько сообщений, но ни один из них не работал у меня.

вопрос

как я могу избежать перезапуска приложения при закрытии приложения электронной почты?


person android developer    schedule 07.07.2013    source источник


Ответы (1)


Прочитав ваш вопрос, я подумал, что попробую написать отчет о сбое.

Вот мой результат: https://github.com/slightfoot/android-crash-reporting

В нем есть все, что вы хотели, и, возможно, даже больше.

person Simon    schedule 08.07.2013
comment
это работает очень хорошо. однако я до сих пор не понимаю, почему я попал в цикл, который перезапускает приложение каждый раз, когда я покидаю Gmail. в примере даже есть возможность показать progressDialog без каких-либо проблем. Теперь я понятия не имею, почему у меня были проблемы с моим приложением. :( - person android developer; 08.07.2013
comment
на самом деле, я вижу, что в библиотеке та же проблема. просто он не падает при onCreate, а по нажатию кнопки. они не исправили это, только избежали этого. теперь вопрос, как такое могло быть. если я установлю сбой в методе onCreate(), я увижу, что приложение будет перезапущено. - person android developer; 08.07.2013
comment
Лучший ответ на свете :) Большое спасибо :) - person Jas; 30.11.2015