UncaughtExceptionHandler加Process 让应用程序不异常崩溃退出

我们在开发应用程序时难免会遇到出现没有被try...catch抓住的RunTimeException信息,从而导致程序异常崩溃退出,大大的影响了用户体验。那么有没有什么方法能避免这一现象呢?网上一查资料,果然有,UncaughtExceptionHandler就是专门干这个的,看名字就知道啥意思了,如果还不了解这个Google或者Baidu一下 UncaughtExceptionHandler对于它的介绍必须一卡车。但是网上的例子无一例外的把错误日志记录到文件或者发往服务器,然后使用Toast或者Dialog提示一下“您的程序出现了异常”,最后应用程序还是退出了,还是退出了。我不能让应用程序退出!

那怎么办呢,下面是我的思路,如果不想看就直接跳过这一段看实现结果好了。首先思路就是能不能把整个应用程序启动的Activity的堆栈信息拿到,当应用程序退出后,在其他进程里根据堆栈信息的先后顺序,逻辑控制一下不就复原了吗,看了好长时间的文档也没有看到怎么得到整个应用的堆栈信息。思路夭折。有一天无意中看到这Process.killProcess这个方法能重新启动应用,那么原来的堆栈信息不就回来了吗,这下好了,连逻辑控制都省去了。好吧,来试试吧。

解决:
首先在UncaughtExceptionHandler的实现类(需要实现)中
public void uncaughtException(Thread thread, Throwable ex) {
Intent intent = new Intent(mContext, ReportPage.class);
intent.putExtra(ReportPage.REPORT_CONTENT,sb.toString());
//跳转到reportPage页面,ReportPage是用来显示错误信息,提供发送到服务器(运行在另一个进程中)
mContext.startActivity(intent);
//然后重启进程
Process.killProcess(Process.myPid());

效果:下面的效果图是程序执行的顺序
在第三个界面的button点击事件中加入了 Button button = null; button.setVisible(View.GONE);代码,必须空指针了


2、

3、

4、有人认为出现了这个界面,不还是让用户看到了程序出现BUG了吗,这是我让你们看的,这里完全可以
不让用户看到,不给ReportActivity 设置界面,定时一秒后finish调,这样不就解决了吗!当然如果你想要发送至服务器也是没有问题的。



5、


6、根据应用程序的Activity堆栈信息,我把异常退出的Activity界面finish了,所以回到第二个Activity界面,应用程序没有退出。


如果有想看工程源码的同志,我已经上传到CSDN上,下载地址:

发布了43 篇原创文章 · 获赞 18 · 访问量 9万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览