Android性能分析-traceview

来源:互联网 发布:mac上怎么使用git 编辑:程序博客网 时间:2024/06/06 09:05

TraceView简介

traceview主要Android平台特有的数据采集和分析工具,主要用于分析Android应用程序的瓶颈。而traceview本身只是一个数据分析工具,数据采集则需要SDK中Debug类或者是DDMS中的工具。
简单描述:traceview就是分析一个应用进程中每个线程(具体可以定位到某个方法)的耗时情况,即占用cpu时间。

用法

  1. 对于已知代码的程序:

对于一些关键代码我们想测试其执行过程中占用cpu的时间时,可以在该关键代码前调用Android SDK中Debug类的startMethonTracing函数(android.os.Debug.startMethodTracing())开始采集数据,在关键代码后面调用Debug的stopMethodTracing函数(android.os.Debug.stopMethodTracing())停止采集。采集的数据保存在sd卡中,然后使用sdk/tools/traceview分析这些数据。

  1. 对于未知源码或者不想使用代码

在DDMS中有一个工具:这里写图片描述进行采集和分析,最好控制操作时间在几秒钟内,确保是小范围分析

使用步骤:1. 选中某个进程, 2. 点击上面工具, 3. 操作app 4. 点击上面工具结束采集 5. eclipse会自动跳转到界面的数据采集图

traceview工具面板介绍

有两方面用途:

1 查看跟踪代码的执行时间,分析哪些是耗时操作
2 可以用于跟踪方法的调用,尤其是Android Framework层的方法调用关系

获取方法的调用顺序

  1. 在traceview中搜索响应的方法名不能使用大写字母
  2. 搜索出的方法会自动展开,其中包含Parents 和 Children 两组信息
  3. 点击Parents下的方法名,直接跳转到调用当前的方法处。Children相反
    这里写图片描述

Traceview 面板分上下两部分
上面是时间轴面板 (Timeline Panel)
左侧显示的是线程信息
右侧黑色部分是显示执行时间段、白色是线程暂停时间段,
右侧鼠标放在上面会出现时间线纵轴,在顶部会显示当前时间线所执行的具体函数信息
下面是分析面板(Profile Panel) - 每一列内容

Inclusive time - 函数本身运行花费时间 + 函数调用其他函数时间
Exclusive time - 函数本身运行花费时间。
Calls + RecurCall/Total 调用 + 重复调用次数 / 函数总调用次数
Cpu Time/Call 总的Cpu时间与总的调用次数之比

这里写图片描述

如何进行具体的分析

有两个问题需要解决:

  1. 如何定位到所关心的地方?

上面只是介绍了如何使用TraceView且有两种用法,但是有时使用第一种方式范围又不太精确,使用第二种添加代码的方式,可能有些地方又监听不到。这种情况可以尝试把开始或者结束放到延迟线程中,延迟一段时间在执行开始或者结束。

  1. 如何查找出哪些地方比较耗时?

TraceView罗列出了是所有监听到的方法,当然也包括Android系统很多方法的耗时,如何在这么多方法里面查找到自己关心的? 可以通过TraceView 底部的find 来查找,通常Android app都是有包名的,可以先针对某些关心的列排序后,在通过包名进行一个个查找,这些就省去自己筛选出自己app 方法耗时排行的时间。
如:
这里写图片描述

另外:
上图中的每项都包含两部分:parents和child。其中parents代表调用该方法的方法,child代表该方法调用的其他方法,如图:
这里写图片描述
从图中可以分析出具体方法的耗时情况及调用次数,然后有针对性的去检查该方法。

参考:http://blog.csdn.net/androiddevelop/article/details/8223805
必读介绍traceview的文章:http://blog.csdn.net/innost/article/details/9008691

0 0