温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ANR检查定位分析工具

发布时间:2020-07-14 01:32:24 来源:网络 阅读:1408 作者:百度MTC 栏目:移动开发

百度MTC是业界领先的移动应用测试服务平台,为广大开发者在移动应用测试中面临的成本、技术和效率问题提供解决方案。同时分享行业领先的百度技术,作者来自百度员工和业界领袖等。

一、ANR是什么

简单说,通常就是App运行的时候,duang~卡住了,怎么搞都动不了。当卡住超过一定时间,Android系统认为这就是一次“ANRApplication Not Responding

具体说,在以下情况发生时,会发生ANR(可能在不同ROM中时间有所更改):

  • 用户的输入在5s内没被App响应;

  • BroadcastReceiveronReceiver()超过10s

  • Service中各生命周期函数执行超过20s

 

二、ANR必须死

用户在App的绝大部分操作,都需要有App的主动回应,比如按下按钮之后按钮样式的改变、下拉滚动条内容的移动、加载资源时的进度条转转转,它们都是操作-反馈配对的模式。对于我们手机上最常见的触摸操作,0.1s的响应延迟已经有很明显的卡顿感了。而对于常见的ANR,用户至少要等5s以上!

 

发生了ANR,往往会弹出对话框,问用户是继续等待还是直接关掉:

ANR检查定位分析工具

相信几乎所有Android手机用户都见过这个然并卵的ANR对话框,但大部分普通用户根本不知道这个对话框在讲什么,并且往往也只有关闭App。漫长的等待就给我看这个?从用户的体验看,就是心中一万只草泥马奔腾起来撞火车的感受。可见ANR对于应用的影响并不亚于Crash

一般来说,界面相对越不流畅App(说明UI线程耗时操作多)越容易发生ANR(一个输入事件在某个设备A4秒有了反馈,并不意味着它在其他设备B上是安全的)。ANR其实就是界面卡顿的极端情况。反过来,只要通过合理的方案消灭了App出现的ANR,往往也同时会使App展示界面表现会更加顺滑流畅。

一些典型的ANR问题场景

1)最常见的错误,UI线程等待其它线程释放某个锁,导致UI线程无法处理用户输入;

2)游戏中每帧动画都进行了比较耗时的大量计算,导致CPU忙不过来;

3Web应用中,网络状态不稳定,而界面在等待网络数据;

4UI线程中进行了一些磁盘IO(包括数据库、SD卡等等)的操作,在个别设备上因为硬件损坏等原因阻塞住了;

5)手机被其他App占用着CPU,自己获取不到足够的CPU时间片,纯属误伤。

通过ANR日志定位问题

ANR发生时,我们往往通过Logcattraces文件(目录/data/anr/)的相关信息输出去定位问题。主要包含以下几方面:

1)基本信息,包括进程名、进程号、包名、系统build号、ANR类型等等;

2CPU使用信息,包括活跃进程的CPU平均占用率、IO情况等等;

3)线程堆栈信息,所属进程包括发生ANR的进程、其父进程、最近有活动的3个进程等等。

三、测试过程发现ANR的现状

1、在平常测试中,ANR有基本测试不到,因为ANR基本发生在垃圾设备中,弱网络,频繁操作。

2、问题不必现,即使看到了问题,定位麻烦:要去data/anr.txt文件里面查找。必须root,没有对应关系,分析复杂,导出文件就必须依赖手机零距离。

 

四、引入ANR检测工具

由于anr问题不必现,因此引入以下ANR检测工具,当anr问题出现时,自动dump手机中的日志信息如trace文件、堆栈信息等,基本原理如下:

4.1、基本原理

ANR检查定位分析工具

         检测到UI主线程卡顿时间超过设定的时间,如4s,即dump trace文件以及堆栈信息,同时抛出异常,收集信息,根据这些文件信息即可定位到发生anr的原因

 

4.2ANR检测工具在Baidu Browser中的应用

4.2.1如何在源代码中插入anr检测工具

步骤一:源代码libs中添加anr.jar

ANR检查定位分析工具

 

步骤二:在 Application onCreate中添加初始化sdk的代码

ANR检查定位分析工具

initSDK(Context context, String appKey, boolean watchdog, int time)

其中time表示检测判定线程是否超时(发生anr)的门限值,单位:ms

 

步骤三:正常编译打包apk

 

4.2.2如何测试发现并定位anr问题
  • 安装步骤4.2.1编译打包插入anr检测的apk

  • 测试app,任意操作(monkey/case),当发生anr时,会自动杀掉进程,并在本地生成日志文件日志路径:/sdcard/lynq_anr下有两个文件夹

Baidu Browser启动为例。

Baidu Browser启动过程主线程过长,在低端机上容易导致发生anr;线程超时,app进程kill掉,查看手机本地trace日志,Crash信息包括trace文件以及堆栈信息

ANR检查定位分析工具

 

  • 分析trace文件

Trace文件通过eclipse中的DDMS可以查看具体发生ANR卡顿的原因

ANR检查定位分析工具

通过real Time/Call从大到小排序,找到对应的与代码相关消耗时间最大的方法

ANR检查定位分析工具

可以看出ANR检查定位分析工具书签数据库初始化消耗CPU时间最长。

 

  • 查看耗时最长方法对应的源代码

找到对应的源代码如下:

ANR检查定位分析工具

主要是数据库的初始化在启动的主线程中进行,容易导致超时在低端机上发生anr问题。

更多干货分享请关注”百度MTC学院“http://mtc.baidu.com/academy/article


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI