1.在Application初始化 //设置该CrashHandler为程序的默认处理器 CrashHandler.getInstance().init(this);
2.具体实现 public class CrashHandler implements Thread.UncaughtExceptionHandler { private Thread.UncaughtExceptionHandler mDefaultHandler; // 程序的 Context 对象 private Context mContext; // CrashHandler 实例 private static CrashHandler INSTANCE = new CrashHandler(); /** * 获取 CrashHandler 实例 ,单例模式 */ public static CrashHandler getInstance() { return INSTANCE; } /** * 初始化 * * @param context */ public void init(Context context) { mContext = context; // 获取系统默认的 UncaughtException 处理器 mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); // 设置该 CrashHandler 为程序的默认处理器 Thread.setDefaultUncaughtExceptionHandler(this); } @Override public void uncaughtException(Thread thread, Throwable ex) { ex.printStackTrace(); Writer writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); ex.printStackTrace(printWriter); printWriter.close(); String stackTraceString = writer.toString(); //使用Toast来显示异常信息 new Thread() { @Override public void run() { Looper.prepare(); Toast.makeText(mContext, "发送未知问题:" + ex.getMessage(), Toast.LENGTH_LONG).show(); writeErrorToFile(stackTraceString); CrashReport.postCatchedException(ex); Looper.loop(); } }.start(); SystemClock.sleep(3000); showErrorActivity(stackTraceString); MyApplication.sendExitCmd(); } private void showErrorActivity(String errorInfo) { Intent intent = new Intent(mContext, ErrorActivity.class); intent.putExtra("bug", errorInfo); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); mContext.startActivity(intent); } //写入错误信息 private void writeErrorToFile(String errorInfo) { try { String fileName = AndUtilTime.getCurrentDate() + ".log"; FileOutputStream fos = new FileOutputStream(BaseConstant.log + fileName); fos.write(errorInfo.getBytes()); fos.close(); } catch (Exception e) { } } }