Android 全局捕获异常信息


都遇到过APP使用崩溃的情况,尤其是在线上的崩溃,我们无法看到崩溃信息,此时就需要对崩溃信息进行收集。之前用的都是第三方的来进行,最近项目中需要自己来实现此功能。

其实Google已经为我们提供了全局捕获异常机制:UncaughtExceptionHandler。

UncaughtExceptionHandler 是Thread类中定义的一个接口,Android中程默认实现了该接口来处理异常信息并退出。


自定义捕获异常

如果我们需要自己捕获并处理异常信息,思路就是 UncaughtExceptionHandler 接口,并将其加入到对应的Thread中,示例代码如下:

//获取系统默认的处理类实例
Thread.UncaughtExceptionHandler oldHandler = Thread.getDefaultUncaughtExceptionHandler();

//定义自己的错误信息处理类
Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() {

            @Override
            public void uncaughtException(Thread t, Throwable e) {
                //当有异常信息时,需要在这里进行处理,

                if (oldHandler != null) {
                    oldHandler.uncaughtException(t,e);//  1
                }
            }
        };

 //设置为默认的处理信息
 Thread.setDefaultUncaughtExceptionHandler(handler);

通过以上代码便可获取到全局的异常信息,可在uncaughtException方法中对错误信息进行保存等操作。


错误处理
  • 当把错误信息保存或发送到服务端后,还需对错误进行处理,如代码 1 处(以上代码只是示例代码,可根据自己的逻辑来对错误进行处理)。如果不对错误进行处理,程序将会无反应,造成ANR。是因为当程序报错时,UI线程中的looper将不在进行消息轮询,所以会造成程序ANR(附:我在测试时,等报错将错误捕捉后试着调用了looper的loop静态方法来重新开启轮询,程序是没有崩溃并可以正常运行的,但程序此时再次报错时,程序就会卡死ANR,不知道是为什么,还望路过的大神们指点)。

建议:一般在项目中报错后会弹出错误提示并退出,退出时可以调用Application的onTerminate方法来实现程序关闭。这样程序再次启动时也不会有任何问题。当然也可以关闭后重新打开APP。


渣渣一枚,以上如有错误,请各位大神指正(抱拳)。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,252评论 25 709
  • Android系统碎片化造成应用程序崩溃严重,在模拟器上运行良好的程序安装到某款手机上说不定就会出现崩溃的现象。而...
    YoungTa0阅读 18,059评论 5 20
  • 这三大块优化好排名也不会差哪里去的。单品的排名上去了展现量自然会有。 大家可以根据下面导读条的要点去逐一对照优化!...
    牟珂宏阅读 4,681评论 0 0
  • 做一个有趣的人远比做一个有爱的,有责任感的人更重要。 我身边有一些姐们,你和她们聊天,绝对不会想超过10分钟。因为...
    茸小呆阅读 4,791评论 0 4
  • 亲爱的丽娟,你好吗? 今天还好!在店里忙碌一天,带着觉察为自己,不干涉别人也不受别人影响就是我的目...
    liuyuxin阅读 1,252评论 0 0

友情链接更多精彩内容