UncaughtExceptionHandler широко используется в приложении?

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

if (!(Thread.getDefaultUncaughtExceptionHandler() instanceof CustomExceptionHandler)) {
         exceptionHandler = new CustomExceptionHandler(
                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString(),
                null, this);

     Thread.setDefaultUncaughtExceptionHandler(exceptionHandler);
}

где CustomExceptionHandler инвентарь UncaughtExceptionHandler, Я держу экземпляр в моем Activityпоэтому я могу использовать его для некоторых других функций (удаление следов стека, их извлечение и т. д.).

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

Я вижу Thread.setDefaultUncaughtExceptionHandler хотя call является статическим, значит ли это, что я могу установить этот обработчик только один раз в своем приложении? Или я могу установить его на поток?

2 ответа

Из документов

 * Sets the default uncaught exception handler. This handler is invoked in
 * case any Thread dies due to an unhandled exception.

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

UncaughtExceptionHandler широко используется в приложении?

Да. Если вы установите его в действии, а действие уничтожено, код обработчика в действии может больше не существовать.

Я установил обработчик в Application-onCreate (не в Activity), чтобы он работал для всех Activity, которые принадлежат Application, для записи журналов сбоев.

Подробнее см. Как изменить сообщение о сбое в Android(если это возможно)

Вот код gpl-v3+ для моего крашлоггера, который записывает записи logcat в файл.

Это инициализируется в Application.onCreate, как это

public class AndroFotoFinderApp extends Application {
    private LogCat mCrashSaveToFile = null;

    @Override public void onCreate() {
        super.onCreate();

        mCrashSaveToFile = new LogCat(this, Global.LOG_CONTEXT, HugeImageLoader.LOG_TAG,
                PhotoViewAttacher.LOG_TAG, CupcakeGestureDetector.LOG_TAG,
                FotoLibGlobal.LOG_TAG, ThumbNailUtils.LOG_TAG, IMapView.LOGTAG,
                ExifInterface.LOG_TAG, ImageMetaReader.LOG_TAG);
    }
}

где константы Global.LOG_CONTEXT, HugeImageLoader.LOG_TAG... тэги логирования Android различных модулей моего кода используют вот так

Log.d(HugeImageLoader.LOG_TAG, "some log message from modul HugeImageLoader)
Другие вопросы по тегам