首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

UncaughtExceptionHandler,用户使用App

2024-12-18 来源:化拓教育网
转载请注明原创出处,谢谢!
  • GitHub:

爱内测反馈的结果报告

(请忽略4.2.1.1这几个字)


爱内测检测详情报告截图.png

一脸懵逼,没听说过,上学时老师也没讲过,我也没见过啊!有问题,干!

这是个什么玩意?

  • 用户神操作,弄了一个开发者没try的异常,会导致应用崩溃
  • 没测试出的Bug
  • ...

为什么要这么干?

你对死亡一无所知.png
  • 让用户怀疑自己
    1.如果我们不这样做,App运行过程中出现异常,导致App弹个黑窗,然后GG。
    用户内心想法:程序员是个呵呵吧!卸载。帅气的我怎么会让你这么欺负?
    2.可如果程序员这样做了,让App在出现Bug,导致App崩溃的时候,不弹小黑窗,直接退掉,用户就会怀疑人生,是不是我不小心按了Home键了?
    3.应用崩溃后,用户点击重启,重启在一般情况下可以解决一半的Bug,这是我开发软件的信仰!
  • 程序员甩锅(不解释)
  • 收集错误日志,下个版本解决问题(重点)

  • 提升App友好度

解决办法

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 设置未捕获异常的处理器
        Thread.setDefaultUncaughtExceptionHandler(new MyHandler());
    }

    class MyHandler implements UncaughtExceptionHandler {
        // 一旦有未捕获的异常,就会回调此方法
        public void uncaughtException(Thread thread, Throwable ex) {
            ex.printStackTrace();
            PrintWriter err;
            try {
                // 收集错误日志,上传到服务器,下个版本解决问题!
                err = new PrintWriter(Environment.getExternalStorageDirectory()
                        + "/err.log");
                ex.printStackTrace(err);
                err.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 停止当前进程
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    }
}

别忘了,配置AndroidManifest.xml文件。
这样我就安心了,打死不背锅!

显示全文