Android 捕获主线程异常崩溃

Posted guangdeshishe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 捕获主线程异常崩溃相关的知识,希望对你有一定的参考价值。

一般情况下我们想要捕获全局异常会调用Thread.setDefaultUncaughtExceptionHandler方法;这个方法虽然能捕获所有线程的异常,但如果是主线程发生未捕获异常,APP虽然不会崩溃,但是主线程的Looper会跳出循环,导致无法继续处理消息,无法与APP进行交互,处于一种假死状态;
想要主线程不崩溃,可以在自定义Application加上下面这段代码:

Handler(Looper.getMainLooper()).post() 
   while (true) 
        try 
            Looper.loop()
         catch (e: Throwable) 
            Log.e("Crash【主线程】", e.message ?: "")
        
    

就是向主线程发送一个我们自定义的Message,这个Message里因为有while死循环,所以这个Message永远不会执行完,这就相当于把ActivityThread里调用的Looper.loop()方法阻塞死了,然后我们再调用Looper.loop()方法开启新的循环去不断处理主线程上的Message,并用try catch捕获到主线程异常;当主线程发生异常时,会执行下一次while循环再次调用Looper.loop()方法处理主线程消息,这样程序就不会因为主线程结束而导致APP崩溃

以上是关于Android 捕获主线程异常崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 协程协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )

Kotlin 协程协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )

android 全局异常捕获,防止崩溃发生

java语言中application异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理

Android 捕获异常并在应用崩溃后重启应用

java基础子线程任务发生异常,主线程事务如何回滚?