异常报错捕捉页面-UncaughtExceptionHandler

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) {

        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值