В настоящее время я застрял с UncaughtExceptionHandler и базой данных Firebase в моем Android Kotlin приложении.
Мой план: в случае необработанного исключения зарегистрируйте трассировку стека в Google Firebase.
У меня уже есть BaseCompatActivity с UncaughtExceptionHandler. Все действия наследуются от этого класса.
Ниже представлена единственная и интересная часть BaseCompatActivity:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val currentUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler()
Thread.setDefaultUncaughtExceptionHandler({ thread, exception ->
val exStackTraceString = StringWriter()
exception.printStackTrace(PrintWriter(exStackTraceString))
FirebaseDatabase.getInstance().getReference("/exception-log").push().setValue(exStackTraceString.toString()).addOnCompleteListener {
currentUncaughtExceptionHandler.uncaughtException(thread, exception)
}
})
}
Все работает, кроме вызова метода по умолчанию для currentUncaughtExceptionHandler.uncaughtException (thread, исключение) потому что эта линия никогда не называется. Кажется, что полный слушатель никогда не вызывается. Это приводит к закрытому, непригодному для использования приложению после возникновения исключительной ситуации :-( Вход в базу данных Firebase работает. Единственная неисправность - это метод обратного вызова слушателя.
Я не хочу использовать System .exit (), потому что это нарушает цепочку исключений.
Вы можете мне помочь?