安卓实现分业务模块异常捕获,全局异常不崩溃,应用继续运行!

需求:按当前项目工程的组织结构,业务模块被分为多个独立的Module,要求当业务模块内发生未捕获到的局部异常时,不重启整个应用,只是单独重启某个异常的业务模块

目前安卓中常用的异常捕获有两种方式:

一种是局部异常捕获,使用try catch包括目标代码块

一种是使用Thread.setDefaultUncaughtExceptionHandler捕获全局异常,但主线程发生异常使用此种方式捕获,应用必将崩溃或重启,无法做到只重启某业务模块

显然两种方式都无法满足需求,那么此时还有另外一种出现全局异常不崩溃,更优雅的异常处理方式:

接管主线程的Looper.loop()方法,并且使用try catch包括它,判断业务模块的包名,重启目标业务模块,完美满足需求

安卓应用启动时,会初始化ActivityThread对象,调用其main方法,在main方法中又调用了Looper.loop()方法,来开启消息循环,处理所有主线程操作

主线程所发生的所有异常,追踪其源头都是Looper.loop方法,接管该方法,即可将主线程出现的任何异常都正确捕获处理了,那么子线程呢

大家都知道子线程默认是没有Looper的,此时可以用捕获全局异常的方式来处理子线程的异常,因为子线程出现异常,一般也都无法继续运行了,所以可以用全局异常处理,并且全局捕获子线程异常,不会导致应用崩溃

两种方式相结合,可以处理应用中的所有异常,并使应用能够正常运行下去。

转载于:https://my.oschina.net/JiangTun/blog/1814600

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值