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