原理:
应用出现异常后,会由默认的异常处理器来处理异常,
我们要做的就是把这个任务接管过来,自己处理异常,包括收集日志,保存到本地,然后上传到服务器。
- 步骤
1.自定义类 实现Thread.UncaughtExceptionHandler 接口
public class CrashHandler implements Thread.UncaughtExceptionHandler {
private static final String TAG = "CrashHandler";
private static CrashHandler INSTANCE = new CrashHandler();
private ISave mSave;//设置日志的保存方式
private CrashHandler() { }//保证只有一个CrashHandler实例
/**
* 获取CrashHandler实例 ,单例模式
*/
public static CrashHandler getInstance() {
return INSTANCE;
}
/**
* 初始化,,设置此CrashHandler来响应崩溃事件
*
* @param logSaver 保存的方式
*/
public void init(ISave logSaver) {
mSave = logSaver;
Thread.setDefaultUncaughtExceptionHandler(this);
}
/**
* 当UncaughtException发生时会转入该函数来处理
*/
@Override
public void uncaughtException(final Thread thread, final Throwable ex) {
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
ex.printStackTrace(printWriter);
Throwable cause = ex.getCause();
while (cause != null) {
cause.printStackTrace(printWriter);
cause = cause.getCause();
}
printWriter.close();
String stringBuilder = "↓↓↓↓exception↓↓↓↓\n" +
writer.toString();
mSave.writeCrash(thread, ex, TAG, stringBuilder);
// 如果处理了,让主程序继续运行3秒再退出,保证异步的写操作能及时完成
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
- 三方SDK
1.网易云捕
2.腾讯bugly
3.Bugtags
4.蒲公英
5.BugHD(fir.im)
6.Testin