Android Crash 前的最后抢救

众所周知,当 Andoird 程序发生未捕获的异常的时候,程序会直接 Crash 退出。而所谓安全气囊,是指在 Crash 发生时捕获异常,然后触发兜底逻辑,在程序退出前做最后的抢救。

一,Java捕获异常

在实现安全气囊之前,我们先思考一个问题,像 bugly、sentry 这种监控框架是如何捕获异常并上传堆栈的呢?要了解这个问题,我们首先要了解一下当异常发生时是怎么传播的。

image.png

可以看到,异常到奔溃的流程很简单,主要分为以下几步:

  • 当抛出异常时,通过Thread.dispatchUncaughtException进行分发。
  • 依次由Thread,ThreadGroup,Thread.getDefaultUncaughtExceptionHandler处理。
  • 在默认情况下,KillApplicationHandler会被设置defaultUncaughtExceptionHandler。
  • 然后KillApplicationHandler中会调用Process.killProcess退出应用。

可以看出,如果我们通过Thread.setDefaultUncaughtExceptionHandler设置自定义处理器,就可以捕获异常做一些兜底操作了,其实 bugly 这些库也是这么做的。

二、自定义异常处理器

那么如果我们设置了自定义处理器

猜你喜欢

转载自blog.csdn.net/xiangzhihong8/article/details/130150095