Android UncaughtExceptionHandler 原理分析

未完待定

当 APP 在线程中跑出了异常就会导致 APP crash。比如我们最常见的 NullPointerException 空指针异常。有些时候我们不希望这种异常导致我们的 APP crash,尤其是在 debug 状态下,程序很大的时候,编译运行一次也不容易,debug 的时候好不容易程序启动起来了,发生了 crash 就不能 debug 执行了,有时候会很耽误开发。

所有有了这个 自定义的异常处理。它可以捕获你的异常,使程序不会crash。

1. 原理

首先介绍 Thread.UncaughtExceptionHandler

Android UncaughtExceptionHandler 原理分析_第1张图片
image.png

简单来说UncaughtExceptionHandler就是用于在线程中当一些系统没有捕获的异常发生的时候来处理这些异常的。你可以使用系统默认的处理方式,你也可以通过Thread.setDefaultUncaughtExceptionHandler()方法设置你自己定义的异常处理。

Android UncaughtExceptionHandler 原理分析_第2张图片
image.png

注意 Thread.setDefaultUncaughtExceptionHandler(CustomUncaughtExceptionHandler) 后,只能保证当在你的程序中如果 crash 没有发生在 UI 线程(主线程)中而是在别的线程中的时候,这个时候 APP 是不会出现崩溃的现象的。如果在主线程中出现crash后,APP还是会崩溃的。

进一步防止程序出现Crash

开头已经说了,有很多时候虽然我们的APP会因为各种问题闪退,但是在更多的时候我们是不希望,我的APP闪退的这就出现了下面的方法。
首先说明这种方法在Activity初始化的时候可能会导致你的APP出现类似ANR的情况(其实并不是ANR,只是状态看起来像,造成的原因是因为Activity还没有完成初始化,也就是生命周期还没有执行完毕就遇到异常了,导致了页面没法显示,所以在正式发布的APP中还是要慎重使用)

如何使用呢?需要和你的后台商量好,在程序中做好标志控制该不该使用ExceptionHandler来处理。如果你的程序某个地方出现大量crash的时候,而这个功能是在Activity初始化后(可能是由于点击某个按钮触动的问题)这个时候你就可以用ExceptionHandler来处理了,让用户在点击这个按钮后,不至于程序崩溃掉。

你可能感兴趣的:(Android UncaughtExceptionHandler 原理分析)