一个程序不管怎么写,都很难避免不crash,当程序crash后虽然无法让其再继续运行,但是如果能够知道crash的原因,那么就可以修复错误。很多产品在发布以后,用户在使用时发生了crash,这个crash信息很难被捕获,这非常不利于产品的持续发展。

可以通过CrashHandler来监视应用的crash信息,给程序设置一个CrashHandler,这样当程序crash时就会调用CrashHandler的uncaughtException方法。在这个方法中可以获取到crash信息并上传到服务器,通过这种方式服务端就能调控程序的运行状况了,在后续的版本中,开发人员就可以对一些错误进行修复。

crash即崩溃,当崩溃发生时,系统会kill掉正在执行的程序,现象就是闪退或者提示用户程序已经停止运行。在Thread中类中有一个setDefaultUncaughtExceptionHandler(UncaughtExceptinHnadler handler)方法,指的是设置一个系统默认的异常处理器,当崩溃发生时,就会调用handler中的uncaughtException方法,在该方法中就可以获取到异常信息,可以选择把异常信息存储到SD卡中,然后在合适的时机通过网络将crash信息上传到服务器甚至可以在crash发生的时候,弹出一个对话框告诉用户crash了,然后再退出,这样做比较温和一点。

我们所说的CrashHandler其实是实现了UncaughtExceptionHandler的自定义对象,重写了uncaughtException()方法,在该方法中就可以获取到crash的异常信息;

示例代码可见CrashHandler这个Demo;

默认异常处理器是Thread类的静态成员,因此它的作用对象是当前进程的所有线程;

当应用程序崩溃时,CrashHandler会将异常信息以及设备信息写入SD卡,然后将异常信息交给系统处理,系统会帮我们中止程序,如果系统没有默认的异常处理器,那么就自行中止。