什么是ANR,造成ANR的原因有哪些?网上很多,这里我就不介绍了。
下面我就以一个实战例子直奔主题:
一:首先当我们手机里运行的某个APP发生了ANR,系统会将当前APP的运行日志写入到sd卡的 data/anr 目录中。
比如我在点击事件中执行以下代码:
运行后多点几次该控件,等个几秒钟就会出现ANR的对话框,这个时候相关日志就会被写入到 data/anr 目录中。
二:这个时候我打开cmd面板,输入adb shell连接上我们的手机,然后输入 ls data/anr 查看anr目录下的生成的trace文件,这里可能会有很多个包名+日期命名的trace文件,因为日期会显示乱码,所以我们需要把anr目录下所有的trace文件都导出来,然后找到你出现ANR的APP的包名开头+日期的trace文件打开。
1,ls data/anr 命令查看trace文件列表
2,exit 退出shell命令模式,然后 adb pull data/anr 导出trace文件列表到电脑硬盘
3,导出文件列表到电脑硬盘(默认位置是如下图去找):
三:把红框里的文件打开,搜索dilvik,定位到如下图红框圈起来的地方,对应图一中MainActivity中第26行死循环的那段代码。
最后根据提示去代码中分析代码逻辑,解决问题吧。
Good Luck!