Android 程序异常提示重启应用

先贴工具类,此类可以保存手机报错设备信息,传到服务器等操作(自定义操作)

/**
 * @ClassName: UnCeHandler
 * @Description:程序异常退出工具类
 * @Author: dingchao
 * @Date: 2019/4/2 13:46
 */
    public class UnCeHandler implements Thread.UncaughtExceptionHandler {
        private Thread.UncaughtExceptionHandler mDefaultHandler;
        public static final String TAG = "CatchExcep";
        BaseApplication application;

        public UnCeHandler(BaseApplication application){
            //获取系统默认的UncaughtException处理器
            mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
            this.application = application;
        }

        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            if(!handleException(ex) && mDefaultHandler != null){
                //如果用户没有处理则让系统默认的异常处理器来处理
                mDefaultHandler.uncaughtException(thread, ex);
            }else{
                try{
                    Thread.sleep(2000);
                }catch (InterruptedException e){
                    Log.e(TAG, "error : ", e);
                }
                Intent intent = new Intent(application.getApplicationContext(), MainActivity.class);
                @SuppressLint("WrongConstant") PendingIntent restartIntent = PendingIntent.getActivity(
                        application.getApplicationContext(), 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
                //退出程序
                AlarmManager mgr = (AlarmManager)application.getSystemService(Context.ALARM_SERVICE);
                mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000,
                        restartIntent); // 1秒钟后重启应用
                Tool.exitApp();
//                application.finishActivity();
            }
        }

        /**
         * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.
         *
         * @param ex
         * @return true:如果处理了该异常信息;否则没有处理返回false.
         */
        private boolean handleException(Throwable ex) {
            if (ex == null) {
                return false;
            }
            //使用Toast来显示异常信息
            new Thread(){
                @Override
                public void run() {
                    Looper.prepare();
                    Toast.makeText(application.getApplicationContext(), "很抱歉,程序出现异常,即将退出.",Toast.LENGTH_SHORT).show();
//                    Tool.exitApp();
                    Looper.loop();
                }
            }.start();
            return true;
        }
    }

使用方法在BaseApplication中的onCreate中

 //程序异常退出重启
        UnCeHandler catchExcep = new UnCeHandler(this);
        Thread.setDefaultUncaughtExceptionHandler(catchExcep);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 2018年12月22 2018年12月22日20点,刚刚加完班,才下了办公楼,看着外面灯火阑珊,自己拖着沉重的步伐...
    蔺相如如如阅读 3,713评论 69 33
  • Excel中沿用了批注的这种特性,无论是表格的制作者或审阅者都可以为表格添加注释或批语。 关注公众号"求学若渴"下...
    求学若渴阅读 719评论 0 0
  • 不知道第几天,就这样算着吧 今天貌似有一点点暴饮暴食的倾向,是真的很想吃东西,翘掉了下午的课,跑到食堂买了自己想吃...
    饼家铺阅读 148评论 0 0
  • 晚上走走 你会看见与你一样的人 她也在走 不认识 想认识 也很简单 不知道她在想什么 还是在等什么人 应该不是在等...
    盛世长歌阅读 218评论 0 0
  • 凌晨三点多,还正在熟睡的我,正做着梦,刹那间,房间那刺眼的灯开了起来,紧接着,妈妈就开始让我起床。我被吵...
    youngerWang阅读 208评论 0 1

友情链接更多精彩内容