ОК, я исследовал этот вопрос.
Не следует создавать собственный обработчик исключений внутри BaseActivity.Лучше сделать это в своем классе Application.В случае BaseActivity вы будете использовать новый обработчик каждый раз, когда начинаете новое действие, что расширяет вашу BaseActivity.
Таким образом, в методе класса приложения onCreate () вы можете получить обработчик приложения по умолчанию
val defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler()
В моем случае это экземпляр
com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler
Этот "defaultExceptionHandler", который вы будете использовать для отправки правильных ошибок в firebase.Затем вы можете создать свой собственный обработчик исключений, но вам нужно держать здесь этот «defaultExceptionHandler».
class DefaultExceptionHandler (private val defaultExceptionHandler:Thread.UncaughtExceptionHandler?) : Thread.UncaughtExceptionHandler {
override fun uncaughtException(thread: Thread, ex: Throwable) {
try {
// here you restore your activity and do other things
// and of course you deal with defaultExceptionHandler
// without it firebase will not work
defaultExceptionHandler?.uncaughtException(thread, ex)
// only after firebase dealed with an exception, you can exit
System.exit(0)
} catch (e: IOException) {
// just catch
}
}
}
И, наконец, firebase покажет вам сбои по мере необходимости.Пример применения onCreate ()
override fun onCreate() {
super.onCreate()
Fabric.with(this, Crashlytics())
val defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler()
val customExceptionHandler = DefaultExceptionHandler(defaultExceptionHandler)
Thread.setDefaultUncaughtExceptionHandler(customExceptionHandler)
}