一、介绍
TraceView是一款性能分析工具,可以进行数据采集和分析,可以以图形化的方式让我们了解要跟踪的程序并且能得到相关method。本文只讲解在app启动时候TraceView的功能,当然,对于app运行过程中出现的卡顿,延迟现象,也可以进行分析。
TraceView主要是分析方法的运行时间以及被调用的次数,在app启动过程中,如果方法花费的时间过长,超过了绘制屏幕第一帧的时间(16ms),就会出现卡顿、甚至ANR(no response)等问题。
TraceView采集数据有两种方法,一种是通过调用debug类,在你要跟踪的地方调用Debug.startMethodTracing方法,结束的地方再次调用即可(此处不作重点介绍);还有一种方法是直接通过DDMS里面的start method profiling实现(对于冷启动无法采集)
二、实例讲解
现在开始讲start method profiling方法。
如图,在DDMS里面选择进程(冷启动无进程可选,所以只能检查热启动(进程还在,只需启动mainactivity)),点击start method profiling。
然后弹出的分析方式里面选择默认方式,点击ok
start method profiling此时变黑,表示正在采集,执行相关app操作,然后再次点击start method profiling此时变红,接着弹出如图采集到的信息
时间面板
时间面板展示了每个线程的执行情况,其中的[1]main即为ui主线程。
移动到某个位置可以查看该点对应的方法的执行信息,点击方法面板则会选中相应的方法。
可以左键按住不放选中区域放大局部精细查看,不同方法用不同颜色标注
方法面板:
方法面板展示了所有方法的执行情况,点击某个方法可以查看在对应线程上的执行时间区域,并会显示其父方法及子方法。
每个方法包括如下信息列,可点击某列进行排序,从而确定产生性能问题的函数:
Incl Cpu Time, Excl Cpu Time, Incl Real Time, Excl Real Time, Incl Cpu Time%, Excl Cpu Time%, Incl Real Time%, Excl Real Time%, Calls+RecurCalls/Total, Cpu Time/Call, Real Time/Call
所有的Time都是以毫秒计算。每列具体含义及作用如下:
a. Incl表示将所有子函数耗时也计算在内,Excl则表示不包括子函数的调用时间。对比可以确定耗时操作发生是自身还是子函数中。
b. Cpu Time表示占用cpu执行的时间,Real Time包括Cpu Time以及等待、切换的时间等,所以一般都大于Cpu Time。对比可以判断耗时操作是否在cpu执行段内。
c. 上面四个指标对应的%表示函数在总时间的占比。方便查看某个函数的时间占比。
d. Calls+RecurCalls/Total表示被外部调用次数+递归次数/总次数。可以查看调用次数是否符合自己预期。
e. Cpu Time/Call, Real Time/Call表示总的Cpu Time及Real Time与总调用次数的比例。查看每次调用的耗时,一般可通过简单此项确定每个函数的性能。
来张图更直观
测试方法:
找出图中执行时间及调用次数多的方法,进行优化
可参考此http://www.cnblogs.com/sunzn/p/3192231.html和https://www.youtube.com/watch?v=gk2G_FAESds&list=PLaYqF7AnyNPcllCrHZFNQrjGTPO8gCb28&index=66
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/196576.html