Android - ANR产生的原因及解决办法

402 阅读1分钟
以下几个条件都会造成ANR:

InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件

BroadcastQueue Timeout :在执行前台广播(BroadcastReceiver)的onReceive()函数时10秒没有处理完成,后台为60秒。

Service Timeout :前台服务20秒内,后台服务在200秒内没有执行完毕。

ContentProvider Timeout :ContentProvider的publish在10s内没进行完成。

造成ANR的原因及解决办法:
  • 主线程阻塞或主线程数据读取。解决办法:使用子线程处理耗时任务或者阻塞任务
  • CPU满负荷,I/O阻塞。解决办法:文件读写或者数据库操作放在子线程。
  • 内存不足。解决办法:优化内存,防止内存泄漏。
  • 各大组件ANR。解决办法:各大组件的生命周期也应避免耗时操作。