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上,下载地址:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值