1.什么是crash?为什么要用?
CrashHandler主要应用于对全局UncaughtException的捕捉,并且根据用户意愿选择是否将其发送给开发者。
也就是说,我们的app通常在开发是会遇到各种crash(崩溃),同时发布之后,也会遇到意想不到的崩溃,开发者为了及时反馈bug,我们就需要一个crash机制,让用户可以将崩溃问题存储并发送给我们,帮我开发者在下一个版本更好的改进。
下面是一个CrashHandler处理崩溃异常的大致流程:
如何实现?
我们新建一个CrashHandler的类,实现UncaughtExceptionHandler接口,这个接口实在Thread类中,该接口主要是为了当Thread因未捕获的异常而突然终止时,调用处理程序。我们实现这个接口,
重写uncaughtException方法,可以实现自定义处理异常(crash)。
@Override public void uncaughtException(Thread thread, Throwable ex) { if (!handleException(ex) && mDefaultHandler != null) { // 如果自定义的没有处理则让系统默认的异常处理器来处理 mDefaultHandler.uncaughtException(thread, ex); } }
handleException是用于自定义错误处理的,收集信息存入文件,发送错误报告等。
这里需要说明,这里运用了单例模式:
因为我们整个app之中处理异常,只需要一个CrashHandler实例来进行,所以我们不必多次创建这个实例。这里就运用了单例模式,我写的懒汉模式(Double Check)
/** 获取CrashHandler实例 ,单例模式 */ public static CrashHandler getInstance() { if (INSTANCE == null) { synchronized(CrashHandler.class){ if(INSTANCE==null){ INSTANCE = new CrashHandler(); return INSTANCE; } } } return INSTANCE; }
好了,就到这里吧。
时间: 2024-10-12 09:27:57