1. ANR的理论背景
1.1 ANR的定义
ANR是Application Not Response的英文缩写,即应用程序无响应。当某个应用(非visible)出现ANR时,会在主界面中弹出一个“应用无响应”的弹出框,严重影响用户体验。
ANR是Android自身消息调度逻辑中的一套针对应用的耗时检测机制,每一个应用都是依靠UI主线程去绘制画面从而展现给用户,但是,这其中就可能出现某些应用的UI主线程
中由于逻辑太过复杂或者UI主线程未能在有限的时间内处理完四大组件(Activity、Service、Broadcast和Content Provider)的特定逻辑,Android为了防止不影响其自身消息调度
逻辑中的其他消息的传递,于是通过ANR的机制来报告给用户,用户在其弹出的窗口中可以选择“等待”或者“关闭应用”。
1.2 ANR的机制
Android定义了四大组件的ANR机制,具体如下表:
组件名称 | 耗时字段定义耗时字 | 耗时阈值 | 含义 |
---|---|---|---|
Activity | KEY_DISPATCHING_TIMEOUT | 5秒 | 针对某个应用进行有效按键后,其未在该阈值内响应则会出现ANR |
Service | SERVICE_TIMEOUT SERVICE_BACKGROUND_TIMEOUT |
前台服务20秒 后台服务200秒 |