以下几个条件都会造成ANR:
InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件
BroadcastQueue Timeout :在执行前台广播(BroadcastReceiver)的onReceive()函数时10秒没有处理完成,后台为60秒。
Service Timeout :前台服务20秒内,后台服务在200秒内没有执行完毕。
ContentProvider Timeout :ContentProvider的publish在10s内没进行完成。
造成ANR的原因及解决办法:
- 主线程阻塞或主线程数据读取。解决办法:使用子线程处理耗时任务或者阻塞任务
- CPU满负荷,I/O阻塞。解决办法:文件读写或者数据库操作放在子线程。
- 内存不足。解决办法:优化内存,防止内存泄漏。
- 各大组件ANR。解决办法:各大组件的生命周期也应避免耗时操作。