在日常开发的过程中应该不可避免的会发生 crash,无论你的程序写的多么完美,都不可能完全避免 crash 的发生,可能是由于 Android 底层的 bug,也可能是由于不充分的机型适配或者是糟糕的网络状况。当 crash 发生时,系统就会kill掉正在执行的程序,现象就是闪退,或者提醒用户程序已经停止运行,这对用户来说是很不友好的,也是我们不愿意看到的,更早的是当用户发生 crash,我们开发者却无法得知程序为何 crash,即便我们想去解决这个 bug,但是由于无法知道用户当时的 crash 信息,所以往往也无能为力,幸运的是,Andorid 提供了处理这类问题的方法,接下来我们就来一起看看到底 Android 给我们提供了什么方法来解决这个棘手的问题
一、Thread 类中的 setDefaultUncaughtExceptionHandler
/**
* Sets the default uncaught exception handler. This handler is invoked in
* case any Thread dies due to an unhandled exception.
*
* @param handler
* The handler to set or null.
*/
public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler handler) {
Thread.defaultUncaughtHandler = handler;
}
这个方法其实就可以解决我们应用程序的 crash 问题,设置系统默认异常处理器,当系统发生crash 时,系统就会回调 UncaughtExceptionHandler 的 uncaughtException 方法,在 uncaughtException 方法中就可以获取到异常信息,可以选择把异常信息存储下来,存储方式大家可以自己选择,然后在合适的时候通过网络将 crash 信息上传到服务器上,这样我们开发人员就可以分析用户 crash 的场景从而在后面的版本中进行修复,我们还可以在发生 crash 发生时弹出一个对话框,告诉用户程序 crash 了,然后再退出