您的位置:首页 > 其它

anr?不存在的!该如何分析?系统应用Gallery和Camera的anr当案例

2017-09-28 10:21 330 查看
不积跬步无以至千里

之前遇到anr,都是通过代码猜测哪一块有问题?是不是这一块比较耗内存,或者有内存溢出或者内存泄漏导致的,还是系统某些方法响应时间过长导致的?但是效率太低,而且当你面临一个你不熟悉又庞大的代码时,再去采用上面的方法会更加束手无策,所以说,怎么去解决anr?答案当然是:还是看log!!!

针对编译器给咱们提出的问题,来找问题,不就是对症下药吗?比你胡乱猜想,有病乱吃药不好的多?有时候也许是因为你不知道怎么分析anr,所以下面给大家说明一下,我这次解决问题的思路。

我遇见的问题是如下:



根据测试的现象,看出当机器消耗内存过多才会出现此现象,所以当时没有根据anr的错误log,去分析,当时只想的是这一块不管是图库还是camera都是相当耗内存的,系统服务+图片,都会对系统出现高消耗内存,所以我怀疑图库是不是打开的时候会有高消耗(查找数据图来寻找图片,系统中的还有sd卡中的),所以当时想的是去查看图库初始化会有什么逻辑,因为本身对图库和相机并不了解,所以只能硬着头皮去看,后来还是搜了一下网上对图库这块做的分析,大概知道了图库的逻辑和架构,但是还是解决不了问题,还要去精细的分析代码,有点头痛,还不如去分析log,于是把anr产生的文件在手机内存中,接下来说一下获取anr崩溃log文件,如下:

adb root

adb remount

adb shell

cd data/anr/

ls

traces_com.android.gallery3d

traces_org.codeaurora.snapcam

会发现目录下,有两个文件,于是需要把这两个文件pull到PC上,方便查看,于是执行命令:

adb pull data/anr/traces_com.android.gallery3d.txt

adb pull data/anr/traces_org.codeaurora.snapcam.txt

打开这两个log文件分析一下问题,看到如下所示:



从这可以看出,cpu的占用率并不高,所以有可能并不是内存溢出和内存泄漏导致的,有可能调用某个方法时间过长,导致anr,接着往下看:



据图可知,看出log再说系统的sensor没有注销掉,是gallery中的方向控制暂停,从而一步步的导致了anr。后来查证camera中也是同样的log,所以问了驱动的同事原来是加速度传感器出现了问题,导致下面的数据传不上来,上层获取不到,然后时间过长导致的,然后修改了,就发现问题迎刃而解。

因此,可以看出解决问题还是看log,一步步来,不要心急,只有对症下药才行,最快的解决根本问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: