Я сталкиваюсь с аналогичным сценарием, например этот с таким же странным поведением: намерение не сработает, диалоговое окно сбоя также не будет отображаться, и приложение закрывается само по себе после сбоя. Logcat
показывает такую ошибку:
E/InputEventSender: Exception dispatching finished signal.
E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
E/MessageQueue-JNI: java.lang.NumberFormatException: For input string: "7512186516213"
and so on....
D/Android Runtime: Shutting down VM
Как мы можем начать действие из UncaughtExceptionHandler
в DaggerApplication
?
Вот мой код. Я использую applicationContext
везде, и я зарегистрировал активность ExceptionDisplay
в своем файле Manifest
. Я уверен, что класс DaggerApplication
справится с этим так же, как и класс Application
, но я, к сожалению, не могу решить эту проблему самостоятельно.
class IpunktApp : DaggerApplication() {
override fun applicationInjector(): AndroidInjector<out DaggerApplication> =
DaggerAppComponent.factory().create(this)
private lateinit var defaultUEH: Thread.UncaughtExceptionHandler
private val unCaughtExceptionHandler = Thread.UncaughtExceptionHandler { thread, ex ->
val stringWriter = StringWriter()
ex?.printStackTrace(PrintWriter(stringWriter))
val exception = stringWriter.toString()
saveLogs(exception.toByteArray(), applicationContext)
applicationContext.startActivity(Intent(Intent(applicationContext, ExceptionDisplay::class.java).apply {
putExtra("error", exception)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}))
defaultUEH.uncaughtException(thread, ex)
exitProcess(1)
}
override fun onCreate() {
super.onCreate()
setupExceptionHandler()
}
private fun setupExceptionHandler() {
try {
defaultUEH = Thread.getDefaultUncaughtExceptionHandler()
Thread.setDefaultUncaughtExceptionHandler(unCaughtExceptionHandler)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
Любые советы приветствуются. Заранее спасибо.