关于Android的Crash

最近在研究如何控制Android的crash问题,原生状态下Android在crash的状态下回出现一个app force close的

dialog,但是对于用户体验相当不好。

     想要屏蔽掉这个dialog,自己实现一个crash的handler是不难的。

1. 自己写一个类,继承UncaughtExceptionHandler。

 

2. 在这个类里写这样的代码

  mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();    
  Thread.setDefaultUncaughtExceptionHandler(this);  

这样这个类在UncaughtException发生的时候就会去调到

uncaughtException()

的方法,在这个方法里,可以自己做crash以后想要做的事情:写log,发log。

但最终还是要将程序退出的 : System.exit(0);

 

3.如果想要出dialog或者启动新的Activity就需要有一个Activity的Context,Application的

Context是不行的。

 

这样对于单个Activity的应用来说应该是很好的方法,每个Activity都去注册一个这个Crash handler,把Context传递给它。

让它去show dialog。

 

但是在Acitivity很多的时候就比较麻烦,要手动去维护Context的对象,一旦对象不对,UI就会阻塞了。而且在一些情况下,Activity的Crash

会导致App的重启,所以show的dialog会被后起的UI冲掉。

对于这一点,很疑惑,跟踪了下log,发现有的情况下,Activity A启动了一个新的Activity B,而B的crash有时候会导致

E/ActivityManager(  245): fail to set top app changed 这样的情况,正常情况整个App应该会被关闭,但是由于这种错误发生了

App无法被关闭,系统应该是重启了它。但是如果crash handler 里最终如果调用

mDefaultHandler.uncaughtException(thread, ex); 又会使正常退出的。找了很久没找到默认的uncaughtException的源码,所以

还是不明白到底发生了什么。

 

暂时,比较好的办法是将Crash handler 注册在Application上,这样它可以拿到所有的UncaughtException,但是要show UI就不行了。

没找到两全其美的办法,只能在其他的地方统一的检查是否发生过crash 然后show UI了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值