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,一步步来,不要心急,只有对症下药才行,最快的解决根本问题。
之前遇到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,一步步来,不要心急,只有对症下药才行,最快的解决根本问题。
相关文章推荐
- 生产制造MES系统中,如何应用报表分析?
- 数据仓库如何在电信网络资源分析系统中应用
- [转]昆明长水机场安防系统应用案例分析
- Full PACS系统功能模块设计及应用案例分析
- android7.0之系统应用Gallery2整体分析以及开始过程
- 探索AI如何应用在ERP系统物料需求分析中
- 第三方支付系统如何测试?案例分析
- oppo通知栏的那些事儿(如何分析系统级应用)
- 如何用好nofollow?nofollow应用的案例分析
- 系统分析---入门(如何确定java应用的入口)
- Struts应用系统案例设计之需求分析
- PgSQL · 应用案例 · 手机行业分析、决策系统设计-实时圈选、透视、估算
- 数据仓库如何在电信网络资源分析系统中应用
- 报表应用系统中如何正确使用图表功能
- 浅谈ANR及如何分析解决ANR.1
- 如何突破瓶颈 轻松设计ZIGBEE应用系统
- Windows Server应用之32位系统如何安装64位打印机驱动
- 循序渐进DB2(第2版)——DBA系统管理、运维与应用案例
- 武汉财政容灾系统应用案例