Android奔溃日志
我以前只知道项目代码集成这个模块,实现UncaughtExceptionHandler就可以处理一些运行时错误,但是代码方面我并没有具体去看。现在有些需求需要重新更改下模块,于是掏出来复习下。
现在崩溃收集一般要么采用腾讯Bugly第三方平台管理,要么自建收集日志工具进行管理。腾讯bugly集成在此不在叙述,集成还是很方便的。自建的话,就是需要在捕获异常的时候,记录下来,上传服务器进行处理。
伪代码如下:
public class CrashHandler implements Thread.UncaughtExceptionHandler {
private Thread.UncaughtExceptionHandler uncaughtExceptionHandler;
private Context mContext;
private static CrashHandler mCrashHandler = new CrashHandler();
private CrashHandler(){
}
public static CrashHandler getInstance(){
return mCrashHandler;
}
public void init(Context context){
uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
mContext = context.getApplicationContext();
}
/**
* 这里就是未捕获的异常,进行统一处理
* @param t
* @param e
*/
@Override
public void uncaughtException(Thread t, Throwable e) {
if (handleException(e)){
//交给系统处理
mCrashHandler.uncaughtException(t,e);
}else {
//自己处理异常
//杀死进程
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
}
}
/**
*先进行处理异常,return false表明未处理
* @param throwable
* @return
*/
private boolean handleException(Throwable throwable){
if (throwable == null){
return false;
}
new Thread(){
@Override
public void run() {
Looper.prepare();
//提示错误信息
Looper.loop();
}
}.start();
saveExceptionToSD(throwable);//保存日志到sd卡
postExceptionToWeb(throwable);//提交到自己服务器
return true;
}
private void saveExceptionToSD(Throwable throwable){
}
private void postExceptionToWeb(Throwable throwable){
}
网上封装好的代码太多了,相关具体可以去爬别人好的代码。但是核心思想都是去自己处理HnadlerException方法里的异常,保证应用给用户好的体验。