ANR程序无响应简介
条评论ANR,英文全称为 Application Not Responding,即应用无响应。
具体表现,弹出一个应用无响应的窗口,也可能不弹出直接闪退。
ANR的类型
ANR一般有三种类型:
- KeyDispatchTimeout(5 seconds) –主要类型 按键或触摸事件在特定时间内无响应
定义参考:ActivityManagerService.java1
2// How long we wait until we timeout on key dispatching.
static final int KEY_DISPATCHING_TIMEOUT = 5*1000; - BroadcastTimeout(前台 10 seconds,后台 60 seconds) BroadcastReceiver在特定时间内无法处理完成
定义参考:ActivityManagerService.java1
2
3// How long we allow a receiver to run before giving up on it.
static final int BROADCAST_FG_TIMEOUT = 10*1000;
static final int BROADCAST_BG_TIMEOUT = 60*1000; - ServiceTimeout(前台 20 seconds,后台 200 seconds) –小概率类型 Service在特定的时间内无法处理完成
定义参考:ActiveServices.java1
2
3
4// How long we wait for a service to finish executing.
static final int SERVICE_TIMEOUT = 20*1000;
// How long we wait for a service to finish executing.
static final int SERVICE_BACKGROUND_TIMEOUT = SERVICE_TIMEOUT * 10;
ANR产生的原因
- 应用自身引起,例如:
主线程阻塞、IOWait等; - 其他进程间接引起,例如:
当前应用进程进行进程间通信请求其他进程,其他进程的操作长时间没有反馈;
其他进程的CPU占用率高,使得当前应用进程无法抢占到CPU时间片
ANR的分析解决
- 分析ANR Trace文件
ANR Trace文件的路径:/data/anr/traces.txt
导出traces.txt文件1
adb pull /data/anr/traces.txt ./
注意:每次发生ANR时都会删除旧的traces文件,重新创建新文件。也就是说Android只保留最后一次发生ANR时的traces信息
- 分析Android的异常信息收集DropBox的日志
DropBox文件路径: /data/system/dropbox1
adb pull /data/system/dropbox/ ./
- 通过BlockCanary检测耗时操作,应用内集成进行检测,将IO操作/耗时操作全部封装成异步任务,放进子线程.
本文标题:ANR程序无响应简介
文章作者:xmaihh
发布时间:2018-07-12
最后更新:2018-07-12
原始链接:https://xmaihh.github.io/blog/2018/07/12/anr-cheng-xu-wu-xiang-ying-jian-jie/
版权声明:采用[CC BY-NC-SA 4.0许可协议]进行许可
分享