ANR分析及解决方案
首先,什么是ANR?
ANR(Application Not responding):是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间仍未能得到有效响应或者响应时间过长,都会造成ANR。
在 Android 里,应用程序的响应性是由 ActivityManager 和 WindowManager 系统服务监视的。当它监测到以下情况中的一个时,Android 就会针对特定的应用程序显示 ANR。
那么,为什么会发生ANR?
- 主线程被 IO 操作(从 4.0 之后网络 IO 不允许在主线程中)阻塞;
- 主线程中存在耗时的计算;
- 主线程中错误的操作,比如 Thread.wait 或者 Thread.sleep 等等…
哪些场景会造成ANR?
- Service Timeout:比如前台服务在20s内未执行完成;
- BroadcastQueue Timeout:比如前台广播在10s内未执行完成