ANR的触发原理

理解Android ANR的触发原理

ANR是什么

是android的一种监测机制,如果ui线程在特定时间无法对输入事件做出响应或则对特定操作没有执行完毕,就会出现anr的情况。

ANR产生原因

1.应用自身进程引起的问题,比如, 在oncreate ,onstart等生命周期中执行耗时操作,ui线程阻塞,挂起,死循环等

为什么Loop也是死循环,但没事?

2,其他进程引起的,比如:io操作导致cpu使用过高,导致当前应用进程无法抢占到cpu时间片

ANR分类及过程

1.InputEventTimeout

输入事件(按键或触屏事件)超过5s无响应就会弹出anr提示框

2.BroadcastQueueTimeout:

比如前台广播在10s内未执行完成

3.ContentProvider Timeout

内容提供者,在publish过超时10s;

4.Service Timeout

Service Timeout是位于”ActivityManager”线程中的AMS.MainHandler收到SERVICE_TIMEOUT_MSG消息时触发。

对于前台服务,则超时为SERVICE_TIMEOUT = 20s;

对于后台服务,则超时为SERVICE_BACKGROUND_TIMEOUT = 200s