一:前言html
最近发现好多人不会从日志中找到ANR的解决方法, 在此分享一个小技巧。 数据库
想必ANR(应用程序无响应)你们都遇到过,大概有如下状况会发生: 网络
1. dispatchTimeout输入事件分发超时,通常是主线程在5秒以内没有响应事件。spa
2. BroadcastTimeout广播超时,通常为广播在10秒内未能执行完毕。.net
3. ServiceTimeout服务超时,通常为服务在20秒内未能执行完毕。线程
其实无非就是不要在主线程中作耗时操做,好比:网络请求,数据库操做什么的,写代码的时候注意一下就能够大大的避免ANR发生。日志
二:输出日志code
若是在发生ANR时手机没有链接着AS的话, 能够用这种办法取到ANR日志,技巧以下:orm
1. 打开CMD小黑框,进入到Android SDK 目录下的platform-tools文件夹下面直接输出 : adb logcat (不会进的自行百度) 复制粘贴到一个txt文本下,方便稍后查看。htm
2. 执行adb pull /data/anr/traces.txt D:\traces.txt 输出traces日志。
三:分析日志
1. 先看logcat输出的日志
查看未果,不要浪费时间, 咱们接着看trace 日志, 看看能不能找到答案。
四:总结
其实anr并不难解决,经过分析日志基本就能够找到答案,若是你也遇到了anr那么尝试用这种办法解决试试, 看看能不能解决你的问题, 最主要的仍是在写代码的时候多加注意,主线程只作刷新Ui的操做, 把一切耗时的操做都放在子线程里去完成,尽可能从根源上避免ANR发生, 最后在这祝你们: 事业顺利,上线无BUG!