Thread.UncaughtExceptionHandler
UncaughtExceptionHandler(未捕获异常处理器)是Thread类的静态内部接口,用来处理用户没有try…caught的异常。也就是系统运行出错throw出来的异常。
UncaughtExceptionHandler里面只有一个方法:
void uncaughtException(Thread thread, Throwable ex);
实现原理
用户调用Thread的静态方法 setDefaultUncaughtExceptionHandler,将自己实现的未捕获异常处理类 设置到Thread私有的静态成员属性defaultUncaughtHandler,也就是简单的set过程。
private static UncaughtExceptionHandler defaultUncaughtHandler;
public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler handler) {
Thread.defaultUncaughtHandler = handler;
}
如果有用户未捕获的异常信息抛出,那么Thread就会调用其成员属性defaultUncaughtHandler的方法uncaughtException 并传入发生异常的thread和ex异常事件。
So what
那这货有什么用呢?
作为一个用户体验友好的app,应该在未知异常发生时给予用户一定的提示,或者主页面跳转。而不是直接直接奔溃闪退。再者,当我们把app上架到应用市场后,应具备奔溃日志收集功能,这样就可以在查看各个不同设备发生异常的情况,并在下一版本中改善这些情况。
好,那看代码就能知道怎个过程的始末了。
code
/**
* Created by cchao on 2016/9/2.
* E-mail: cchao1024@163.com
* Description:奔溃日志收集
*/
public class CrashCatchHandler implements Thread.UncaughtExceptionHandler {
public static final String TAG = "CrashCatchHandler";
//log保存路径
public static String LOG_PATH;