本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点
造成ANR的条件
以下四个条件都可以造成ANR发生:
-
InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件
-
BroadcastQueue Timeout :在执行前台广播(BroadcastReceiver)的onReceive()函数时10秒没有处理完成,后台为60秒。
-
Service Timeout :前台服务20秒内,后台服务在200秒内没有执行完毕。
-
ContentProvider Timeout :ContentProvider的publish在10s内没进行完。
常见的耗时操作
在Android开发中,导致应用程序无响应(ANR)的一些常见耗时操作包括:
网络操作:
例如,HTTP 请求、下载文件、访问REST API等。网络操作通常需要较长的时间,尤其在网络条件不好的情况下。
数据库操作:
大量的数据库查询、插入、更新、删除操作可能会占用大量时间。特别是如果在主线程进行这些操作时,会直接导致ANR。
文件读写:
对大文件进行读写操作也可能非常耗时。这些操作同样不应在主线程中进行。
1、文件相关的一些API都要小心
包括但不限于 new File(),exists(),lastModified()等
2、读写一些ass