作者:川人是天下的盐恋歌_334 | 来源:互联网 | 2023-09-11 10:46
一.什么是UncaughtExceptionHandlerUncaughtExceptionHandler是JavaThread类中定义的一个接口,用于处理未捕获的异常导致线程的终
一.什么是UncaughtExceptionHandler
UncaughtExceptionHandler 是Java Thread类中定义的一个接口,用于处理未捕获的异常导致线程的终止。
当我们的App 停止运行的时候,就会走 UncaughtExceptionHandler的uncaughtException 方法,在该方法中可以获取到异常的信息。
所以,我们通过 setDefaultUncaughtExceptionHandler 该方法来设置线程的默认异常处理器,将异常信息保存到本地或者是上传到服务器,方便我们快速的定位问题。
二.捕获全局异常的工具类
public class NeverCrash {private CrashHandler mCrashHandler;private static NeverCrash mInstance;private NeverCrash() {}private static NeverCrash getInstance() {if (mInstance == null) {synchronized (NeverCrash.class) {if (mInstance == null) {mInstance = new NeverCrash();}}}return mInstance;}public static void init(CrashHandler crashHandler) {getInstance().setCrashHandler(crashHandler);}/*** @author Longchengbin* @description 捕获异常的回调操作* @since 2020-8-3 08:54**/private void setCrashHandler(CrashHandler crashHandler) {mCrashHandler = crashHandler;new Handler(Looper.getMainLooper()).post(new Runnable() {@Overridepublic void run() {for (; ; ) {try {Looper.loop();} catch (Throwable e) {LogUtils.e(TimeUtils.getTimeNow() + "程序崩溃原因:" + e.getMessage());LogUtils.file(TimeUtils.getTimeNow() + "程序崩溃原因:" + e.getMessage());if (mCrashHandler != null) {//捕获异常处理mCrashHandler.uncaughtException(Looper.getMainLooper().getThread(), e);}}}}});/*** @author Longchengbin* @description 设置系统全局异常* @since 2020-8-3 08:55**/Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {@Overridepublic void uncaughtException(Thread t, Throwable e) {if (mCrashHandler != null) {//捕获异常处理mCrashHandler.uncaughtException(t, e);}}});}/*** @author Longchengbin* @description 异常回调接口* @since 2020-8-3 08:53**/public interface CrashHandler {void uncaughtException(Thread t, Throwable e);}
}
三.在application中设置初始化工具