ANR类型
按键或触摸事件在特定时间内无响应
1 | //ActivityTaskManagerService.java |
BroadcastRecevier超时
1 | //ActivityManagerService.java |
前台广播超时时间是 10s,后台广播超时是 60s,这类超时没有提示框弹出。
Service超时
1 | ActiveServices.java |
当发生ANR时,会将相应信息记录到/data/anr/traces.txt
降低ANR的一些技巧
- 将所有耗时操作,比如访问网络,Socket通信,查询大量SQL语句、IO操作、复杂逻辑计算等都放在子线程中去
- onCreate 和 onResume 回调中尽量避免耗时的代码
- View 的 onOnTouchevent 和 onclick 中避免耗时的代码
AMS系统时间调节原理
程序等待原理分析