安卓 ANR 是什么,怎么避免

ANR 是什么,如何避免它

ANR 的全称是 Application Not Responding,中文是应用程序没有响应的意思。
那么我们在实际开发中如何避免这个问题,首先我们要从四大组件最大的耗时说起:

1. Activity:输入事件(按键和触摸事件)5s 内没被处理

2. BroadcastReceiver:在 10s 内发送的广播没有处理完成

3. Service:前台 Service( 20s 内)后台 Service(200s 内)没有完成启动

4. ContentProvider:数据库变化发布没有在 10s 内进行完

首先这四个组件都是在主线程中执行的,所以不能做耗时操作(比如请求网络、操作 IO),造成 ANR 主要的原因这些耗时操作是直接在主线程中完成,我们应该把这些耗时操作放到子线程中来,这样就能有效避免 ANR。

 ANR 实现原理 

ANR 检测是由系统服务来完成,每当主线程接收到操作之后,系统会使用 Handler 会发送一个延迟消息,当这个操作完成之后会将这个延迟消息移除,如果这个延迟消息没有被移除,那么就证明应用没有及时响应,同时也会触发系统向用户发送 ANR 警告。

触发整个 ANR 过程可分为三个步骤:埋炸弹、拆炸弹、引爆炸弹

ANR  优秀文章  http://gityuan.com/2016/07/02/android-anr/        https://www.jianshu.com/p/fa962a5fd939

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值