在我们平时的开发过程中,你会发现无论你怎么小心翼翼,几乎都不可能避免你的代码crash,当crash之后虽然无法让它继续运行,但是如果我们能够知道原因的话,就可以很快修复掉。然而现实开发中,往往是产品已经发布上线了,在用户的正常使用过程中才碰到,这样的话crash信息就很难捕捉并反馈给我们开发人员,这个对于产品的长期迭代和优化升级是很不利的,那么怎么解决这个问题呢?幸运的是,Android提供了处理这类问题的方法,这个也就是我们今天所要讲解的话题了:使用CrashHandler来获取应用的crash信息。
我们先看一下Thread类中的一个方法,当crash发生的时候,系统就会回调UncaughtExceptionHandler的uncaughtException方法,在uncaughtException中就可以获取到异常信息。
有了以上的了解之后呢,我们开始实现吧。
1.首先需要实现一个UncaughtExceptionHandler对象,在它的uncaughtException方法中获取异常信息并将其存储在SD卡中或者回传给服务器开发人员进而进行分析,然后调用Thread的setDefaultUncaughtExceptionHandler方法将其设置为线程默认的异常处理器。
在应用崩溃的时候,将异常信息以及设备厂商和运营商,系统版本和网络sim卡类型等信息一同写入sd卡内,接着异常交给系统处理,系统会终止程序。
将异常信息写入sd卡内;
将手机相关信息一同写入;
其中Utils类中的获取当前网络类型的方法就不贴代码了,有兴趣可以查看源码;
好了,异常处理类MyCrashHandler已经写完了,那么如何使用呢?so easy
2.在你的application中进行初始化
有了以上两步之后,我们就就再也不怕程序crash了,不信就试试吧。
3.模拟crash情景
可以看到,在MainActivity中,给按钮添加点击事件,在第二次点击的时候,人为抛出一个运行时异常,好的,要的就是这种效果,哈哈。现在程序挂了吧,去你SD卡的路径下查看一下吧。有没有看到类似下图的的log信息呢?
有了这个技能包之后,以后就能愉快地抓取crash信息了。
科技改变生活,程序员改变世界!
网友评论