[转]就这一次看懂TraceView

https://blog.csdn.net/yinzhijiezhan/article/details/80167283

一、TraceView的用处

TraceView用于分析计算性能,流入某个方法过于耗时导致UI卡顿,或者某个方法调用次数过多,或者某个方法虽然并不占用太多内存但是占用了大量的CPU资源等等。
 

二、获取TraceView文件的三种方式

1:方式一:通过代码获取

 

 

a:在你想要检测的某段代码的开始位置调用
Debug.startMethodTracing("custom");
其中custom可根据需要自定义,其实就是生成的TraceView文件的文件名,例如custom.trace
b:在你想要检测的某段代码的结束位置调用
Debug.stopMethodTracing();
结束检测没有参数。
注意:这两行代码要在同一个线程成对出现。
c:通过以上设置运行代码后就会在手机里生成/sdcard/custom.trace文件

 

后面会着重讲打开.trace文件且分析.trace文件的方法。
 

2:方式二:通过Android Studio的Monitor的CPU模块生成

 

b:根据需要操作一下app,再点击该按钮Stop Method Tracing,则检测区间结束,Studio会打开.trace文件的查看窗口,
这个.trace文件在你app项目的captures目录下。
c:这个窗口界面并不友好,也不好用,我们不直接观察这个界面,所以我们像方式一一样将这个.trace文件保存到某个目录。
这里为了和上面的方式一统一,我也把这个文件保存到D:\folder,并且重命名为custom.trace文件。
后面会着重讲打开.trace文件且分析.trace文件的方法。
 

3:通过Tools --> Android --> Android Device Monitor获取

 

 

c:分析完成后会打开.trace文件如下图,这个界面的底部的搜索功能不可用,而且我们经常需要搜索功能,所以我的习惯也是
不采用这种方式产生的.trace文件。

到此,三种获取.trace文件的方式讲完了,第一种方式和第二种方式我们都获取到了.trace文件,第三种方式我一般不采用。
 

三:分析trace文件

前面讲到的方式一方式二我们获取到了.trace,下面讲解如果打开并分析该.trace文件

 

 

 

 

 

 

Incl Cpu Time%
Incl Cpu Time
某函数占用的CPU时间,包含内部调用其它函数的CPU时间

Excl Cpu Time% 
Excl Cpu Time
某函数占用的CPU时间,但不含内部调用其它函数所占用的CPU时间
结论:父方法的Incl Cpu Time = 父方法的Excl Cpu Time + 子方法的Incl Cpu Time....  省略号说明一个方法可以调用多个方法

Incl Real Time%
Incl Real Time
某函数运行的真实时间(以毫秒为单位),内含调用其它函数所占用的真实时间

Excl Real Time%
Excl Real Time
某函数运行的真实时间(以毫秒为单位),不含调用其它函数所占用的真实时间
结论:父方法的Incl Real Time = 父方法的Excl Real Time + 子方法的Incl Real Time....省略号说明一个方法可以调用多个方法

Call+Recur Calls/Total
没展开某个方法时:
会显示该方法被程序员主动调用次数,以及被自身递归调用次数;例如:2+3,程序员调用两次,自己递归调用3次
展开某个方法时:
父方法会显示:其调用(程序员主动调用,非递归)该方法的次数/该方法的总次数,例如:2/5,说明该方法总共被调用5次其中父方法主动调了他2次
子方法会显示:子方法被其调用(程序员主动调用)的次数/子方法被调用的总次数,例如1/5
注意:这里的程序员主动调用是指,你看到的代码调用了几次就是几次,并不包括代码运行中的递归
例如funcA(){
funcD();
funcB();
funcB();
}
这里程序员主动调用了两次funcB()一次funcD(),并没有管funcB()有没有递归的情况。
再例如funcB(){
funcB();
funcB();
}
这里funcB()产生了递归,但是程序员在funcB()中只主动调用了2次funcB();不管funcB()递归了多少次。

Cpu Time/Call
某函数的Incl Cpu Time与调用次数的比。相当于该函数平均执行时间,注意不是Excl Cpu Time;

Real Time/Call
某函数的Incl Real Time与调用次数的比。相当于该函数平均执行时间,注意不是Excl Real Time;

注意:这些列可以左右拖动调换位置

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值