как запустить действие из UncaughtExceptionHandler в DaggerApplication

Я сталкиваюсь с аналогичным сценарием, например этот с таким же странным поведением: намерение не сработает, диалоговое окно сбоя также не будет отображаться, и приложение закрывается само по себе после сбоя. 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()
        }
    }
}

Любые советы приветствуются. Заранее спасибо.


person BWappsandmore    schedule 30.06.2020    source источник