在 UncaughtExceptionHandler 中将堆栈跟踪记录到 FirebaseDatabase 时出现问题,



我目前在我的Android Kotlin应用程序中使用UncaughtExceptionHandler和Firebase Database。

我的计划: 如果出现未捕获的异常,请将堆栈跟踪记录到 Google Firebase。

我已经有一个带有UncaughtExceptionHandler的BaseCompatActivity。所有活动都继承自此类。

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)
}
})
}

除了当前未被选中的异常处理程序.uncaughtException(线程,异常(的默认方法调用之外,一切都在工作,因为从不调用此行。似乎完整的听众永远不会被召唤。这会导致异常发生后应用程序未关闭、无法使用:-( 正在登录 Firebase 数据库。唯一损坏的是侦听器回调方法。

我不想使用 System.exit((,因为这会破坏异常链。

你可以帮我吗?

来自Thread.setDefaultUncaughtExceptionHandler的文档:

"设置线程由于未捕获的异常而突然终止时调用的默认处理程序">

您对 Firebase 数据库的调用使用异步回调。如果没有更多信息,很难确定,但考虑到您的 UI 卡住了,您的主线程中的某些东西正在被杀死。您可以进行调用,但结果没有要返回的线程,因为线程已终止。

如果你使用的是Firebase,我建议看看Crashlytics,他们有一种方法来处理这个问题。

相关内容

  • 没有找到相关文章

最新更新