说说烦人的Crash

  • 内容
  • 评论
  • 相关

前言

在我们日常的开发中,Crash总是无法避免的,也许是由于糟糕的网络,也许是代码的逻辑bug等等,总之发生了Crash就要修复,可是当我们的Crash发生在客户的手上,那么Crash信息就不是那么好获取了,还有就是在开发过程中,昙花一现的bug,可是这时ADB把log吃了,那就悲催了,所以写了一个工具类,用来自动保存/上传Crash信息。

UncaughtExceptionHandler

在java中Thread有一个静态方法Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler handler)用来设置没有被程序处理的异常,一般情况下,默认的处理就是系统杀死程序,也就是Crash,我们所要做的就是在系统杀死我们程序之前保存异常堆栈信息到本地,然后下一次启动的时候进行上传处理。

read this fucking source code

原理已经说了,然后接下来看看实现。首先将CrashHandler实现UncaughtExceptionHandler接口,覆写其uncaughtException方法,在init()方法中将线程默认的异常处理设置为自己,这样就可以处理未捕获的异常了。然后在程序结束之前保存异常堆栈信息。调用checkCrash()方法会自动检查是否上一次关闭有Crash信息,如果有则自动调用uploadCrashInfo()方法上传,默认为空实现,你可以继承CrashHandler,并重写此方法即可。

然后调用这段代码也是so easy的,一般来说,这种初始化是放在Application中的,所以我们继承Application,然后在其onCreate()方法中调用下面一句代码即可。

最后需要在AndroidManifest.xml文件中配置application的 android:name属性为自定义的Application。这样当异常发生的时候,证据就被留下来了。

评论

1条评论

发表评论

电子邮件地址不会被公开。