前言
在使用Android APP时,有时会由于开发人员没有通过try catch捕获异常,如ArithmeticExecption除零等算术异常,导致APP弹出"XX程序异常退出",带来不好的用户体验,这时,可以通过UncaughtExceptionHandler来捕获程序中未捕获的异常,优化程序,同时,也可以定制自己的日志系统,将异常信息发给服务器,以便开发人员改进代码。
一、基本使用
MyCrashHandler.java
public class MyCrashHandler implements Thread.UncaughtExceptionHandler {
private Thread.UncaughtExceptionHandler defaultHandler; // 系统默认的UncaughtException处理类
private MyCrashHandler() {
// 获取系统默认的UncaughtException处理器
defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
// 设置该CrashHandler为程序的默认处理器
Thread.setDefaultUncaughtExceptionHandler(this);
}
public static MyCrashHandler getInstance() {
return SingletonHolder.INSTANCE;
}
/**
* 通过静态内部类实现单例
*/
private static class SingletonHolder{
private static final MyCrashHandler INSTANCE = new MyCrashHandler();
}
@Override
public void uncaughtException(Thread t, Throwable e) {
// 在这里可以对异常做一些自定义处理,如上传到服务器等
// handle the expection
if (defaultHandler != null) {
// 如果用户没有处理则让系统默认的异常处理器来处理
defaultHandler.uncaughtException(t, e);
}
}
}
MyApplication.java
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
MyCrashHandler.getInstance();
}
}
步骤:1、继承UncaughtExceptionHandler 2、通过单例将类的实例提供出去 3、重写uncaughtException,并在这里针对异常自定义自己的处理方式,如保存到本地或上传到服务器等 4、继承Application并重写onCreate,实例化MyCrashHandler