package com.xiecc.seeWeather.component;
import android.content.Context;
import com.xiecc.seeWeather.common.utils.SharedPreferenceUtil;
import com.xiecc.seeWeather.common.utils.Util;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
/**
* Created by zk on 2015/12/24.
* 捕获程序崩溃信息
*/
public class CrashHandler implements Thread.UncaughtExceptionHandler {
private static Thread.UncaughtExceptionHandler mDefaultHandler = null;
private Context mContext = null;
private final String TAG = CrashHandler.class.getSimpleName();
public CrashHandler(Context context) {
this.mContext = context;
}
/**
* 初始化,设置该CrashHandler为程序的默认处理器
*/
public static void init(CrashHandler crashHandler) {
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(crashHandler);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
System.out.println(ex.toString());
PLog.e(TAG, ex.toString());
PLog.e(TAG, collectCrashDeviceInfo());
PLog.e(TAG, getCrashInfo(ex));
// T崩溃后自动初始化数据
SharedPreferenceUtil.getInstance().setCityName("北京");
OrmLite.getInstance().deleteDatabase();
// 调用系统错误机制
mDefaultHandler.uncaughtException(thread, ex);
}
/**
* 得到程序崩溃的详细信息
*/
public String getCrashInfo(Throwable ex) {
Writer result = new StringWriter();
PrintWriter printWriter = new PrintWriter(result);
ex.setStackTrace(ex.getStackTrace());
ex.printStackTrace(printWriter);
return result.toString();
}
/**
* 收集程序崩溃的设备信息
*/
public String collectCrashDeviceInfo() {
String versionName = Util.getVersion(mContext);
String model = android.os.Build.MODEL;
String androidVersion = android.os.Build.VERSION.RELEASE;
String manufacturer = android.os.Build.MANUFACTURER;
return versionName + " " + model + " " + androidVersion + " " + manufacturer;
}
}