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 全局异常处理器 )