Android通过trace日志文件分析定位ANR问题

时间:2024-04-05 13:02:55

什么是ANR,造成ANR的原因有哪些?网上很多,这里我就不介绍了。

下面我就以一个实战例子直奔主题:

一:首先当我们手机里运行的某个APP发生了ANR,系统会将当前APP的运行日志写入到sd卡的 data/anr 目录中。

比如我在点击事件中执行以下代码:

Android通过trace日志文件分析定位ANR问题

运行后多点几次该控件,等个几秒钟就会出现ANR的对话框,这个时候相关日志就会被写入到 data/anr 目录中。

二:这个时候我打开cmd面板,输入adb shell连接上我们的手机,然后输入 ls data/anr 查看anr目录下的生成的trace文件,这里可能会有很多个包名+日期命名的trace文件,因为日期会显示乱码,所以我们需要把anr目录下所有的trace文件都导出来,然后找到你出现ANR的APP的包名开头+日期的trace文件打开。

1,ls data/anr 命令查看trace文件列表

Android通过trace日志文件分析定位ANR问题

2,exit 退出shell命令模式,然后 adb pull data/anr 导出trace文件列表到电脑硬盘

Android通过trace日志文件分析定位ANR问题

3,导出文件列表到电脑硬盘(默认位置是如下图去找):

Android通过trace日志文件分析定位ANR问题

三:把红框里的文件打开,搜索dilvik,定位到如下图红框圈起来的地方,对应图一中MainActivity中第26行死循环的那段代码。

Android通过trace日志文件分析定位ANR问题

最后根据提示去代码中分析代码逻辑,解决问题吧。

Good Luck!