package com.ly.supermvp.utils;
import android.content.Context;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
/**
* <Pre>
* 用来捕捉崩溃异常的句柄
* </Pre>
*
* @author 刘阳
* @version 1.0
* <p/>
* Create by 2016/3/21 11:38
*/
public class CrashHandler implements Thread.UncaughtExceptionHandler {
private final String TAG = CrashHandler.class.getSimpleName();
private static Thread.UncaughtExceptionHandler defaultHandler = null;
private Context context = null;
public CrashHandler(Context context) {
this.context = context;
}
/**
* 初始化,设置该CrashHandler为程序的默认处理器
*/
public static void init(CrashHandler crashHandler) {
defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(crashHandler);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
WriteLogUtil.e(TAG, ex.toString());
WriteLogUtil.e(TAG, getCrashDeviceInfo());
WriteLogUtil.e(TAG, getCrashInfo(ex));
// 调用系统错误机制
defaultHandler.uncaughtException(thread, ex);
}
/**
* 获取应用崩溃的详细信息
* @param ex
* @return
*/
public String getCrashInfo(Throwable ex){
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
ex.setStackTrace(ex.getStackTrace());
ex.printStackTrace(printWriter);
return writer.toString();
}
public String getCrashDeviceInfo(){
String versionName = DeviceUtil.getVersionName(context);
String model = android.os.Build.MODEL;
String androidVersion = android.os.Build.VERSION.RELEASE;
String manufacturer = android.os.Build.MANUFACTURER;
return versionName + " " +
model + " " +
androidVersion + " " +
manufacturer;
}
}