UncaughtExceptionHandler
Java提供了一种捕获全局异常的机制,当线程中出现异常时,我们可以主动将其捕获,并传入自己的异常
处理其,可以决定是否结束程序;
捕获处理某个线程的异常:1
2
3
4
5
6// 此处代码为RxJava2不处理onError时,将异常交给当前线程默认的异常处理器处理
static void uncaught(@NonNull Throwable error) {
Thread currentThread = Thread.currentThread();
UncaughtExceptionHandler handler = currentThread.getUncaughtExceptionHandler();
handler.uncaughtException(currentThread, error);
}
设置自己的线程异常处理器:1
thread.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
将所有线程异常统一处理:1
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
自定义UncaughtExceptionHandler
1 | public class CrashHandler implements Thread.UncaughtExceptionHandler { |
注册:1
2
3
4
5
6
7public class CrashApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(CrashHandler.getInstance(this));
}
}
在Android中,可以通过UncaughtExceptionHandler实现在抛出异常时,跳转到指定页面,可以参考项目:https://github.com/Ereza/CustomActivityOnCrash