简介

TraceView 是 Android 平台配备一个很好的性能分析的工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到 method。详细内容参考:http://developer.android.com/tools/debugging/debugging-tracing.html

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

Traceview的使用步骤:
1、选择追踪范围加入记录代码
2、利用tools下的工具trace view打开.trace文件
3、分析trace文件
此方法适用于有目标应用源代码的情况。
开发者在开始追踪前调用Android SDK中Debug类的startMethodTracing函数,并在结束追踪前调用stopMethodTracing函数。这两个函数运行过程中将采集运行时间内该应用所有线程(注意,只能是Java线程)的函数执行情况,并将采集数据保存到/mnt/sdcard/目录下的一个.trace文件中(路径也可以自己制定)。然后利用SDK中的Traceview工具来分析这些数据。

在没有目标应用源代码的情况下,可以借助Android SDK中的DDMS工具。DDMS可采集系统中某个正在运行的进程的函数调用信息。DDMS工具中Traceview的使用下图所示。
点击开启方法分析后对应用的目标页面进行测试操作,测试完毕后停止方法分析时,DDMS会自动触发Traceview工具来浏览采集数据。界面会跳转到 DDMS 的 trace 分析界面。

示例

public class MainActivity extends ListActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Debug.startMethodTracing("bqt_traceview");//【权限】The trace file will be put under "/sdcard" unless an absolute path is given
        String[] array = { "点击添加TextView", };
        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>(Arrays.asList(array))));
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Debug.stopMethodTracing();
    }
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        addView();
    }
    private void addView() {
        TextView tv_info = new TextView(this);// 将内容显示在TextView中
        tv_info.setText(new SimpleDateFormat("yyyy.MM.dd HH-mm-ss").format(new Date()));
        tv_info.setTextColor(Color.RED);
        tv_info.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
        tv_info.setPadding(20, 10, 20, 10);
        getListView().addFooterView(tv_info);
    }
}

说明:
  开发文档中说可以在activity的onCreate()中添加Debug.startMethodTracing(), 而在onDestroy()中添加Debug.stopMethodTracing(),但是在实际的测试时发现这种方式其实并不好用,因为通常情况下我们的activity的onDestroy()是由系统决定何时调用的,因此可能等了很长时间都不会得到这个trace文件。

traceview工具所在的路径为【D:\Android\sdk\tools】

生成的trace文件为:

在CMD中使用traceview打开trace文件的命令为【traceview d:/bqt_traceview.trace】

结果



界面分析

TraceView 界面比较复杂,其 UI 划分为上下两个面板,上半部分为Timeline Panel(时间线面板),下半部分为 Profile Panel(分析面板)。

Timeline Panel 又可细分为左右两个 Pane:
  • 左边 Pane 显示的是测试数据中所采集的线程信息。
  • 右边 Pane 所示为时间线,时间线上是每个线程测试时间段内所涉及的函数调用信息。这些信息包括函数名、函数执行时间等。
另外,开发者可以在时间线 Pane 中移动时间线纵轴。纵轴上边将显示当前时间点中某线程正在执行的函数信息。

Profile Panel 是 TraceView 的核心界面,其内涵非常丰富。它主要展示了某个线程(先在 Timeline Panel 中选择线程)中各个函数调用的情况,包括 CPU 使用时间、调用次数等信息。而这些信息正是查找 hotspot 的关键依据。所以,对开发者而言,一定要了解 Profile Panel 中各列的含义。下表列出了 Profile Panel 中比较重要的列名及其描述。

Incl Cpu Time    某函数占用的CPU时间,包含内部调用其它函数的CPU时间
Excl Cpu Time    某函数占用的CPU时间,但不含内部调用其它函数所占用的CPU时间
Incl Real Time    某函数运行的真实时间(以毫秒为单位),内含调用其它函数所占用的真实时间
Excl Real Time    某函数运行的真实时间(以毫秒为单位),不含调用其它函数所占用的真实时间
Call+Recur Calls/Total    某函数被调用次数以及递归调用占总调用次数的百分比
Cpu Time/Call    某函数调用CPU时间与调用次数的比。相当于该函数平均执行时间
Real Time/Call    同CPU Time/Call类似,只不过统计单位换成了真实时间

一般而言,hotspot包括两种类型的函数:
  • 一类是调用次数不多,但每次调用却需要花费很长时间的函数。在示例代码中,它就是hotspot 1。
  • 一类是那些自身占用时间不长,但调用却非常频繁的函数。在示例代码中,它就是hotspot 2。
相对来说,类型1的hotspot比较好找,步骤是先按降序对时间项进行排列(可以是时间百分比、真实时间或CPU时间),然后查找耗费时间最多的函数。
一般而言,先应对应用程序自己实现的函数进行排查,Framework的函数也有可能是hotspot,但主因一般还是在应用本身(例如设置复杂的界面,导致对应XML解析非常慢)。

找到hotspot之后,开发者就需要结合代码来进行对应的优化了。关于Java代码优化,读者可参考如下资料:http://developer.android.com/training/articles/perf-tips.html
总体而言,Hotspot的查找是一个细致的工作,需要开发者对目标程序的代码,以及Traceview工具都比较熟悉才行。

Traceview 性能分析工具的更多相关文章

  1. TraceView性能分析工具介绍

    一.TraceView简介 TraceView是AndroidSDK里面自带的工具,用于对Android的应用程序以及Framework层的代码进行性能分析. TraceView是图形化的工具,最终它 ...

  2. 正确使用Android性能分析工具——TraceView

    http://blog.jobbole.com/78995/     首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他技术 - 导航条 - 首页 最新文章 IT 职场 前端 - Ja ...

  3. Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)

    此篇将重点介绍几种常用的Android性能分析工具: 一.Logcat 日志 选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗.当我们打开一个Activit ...

  4. Android性能分析工具介绍

    1. Android系统性能调优工具介绍 http://blog.csdn.net/innost/article/details/9008691 TraceviewSystraceOprofile 2 ...

  5. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  6. Java 性能分析工具 , 第 2 部分:Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

  7. Java 性能分析工具 , 第 1 部分: 操作系统工具

    引言 性能分析的前提是将应用程序内部的运行状况以及应用运行环境的状况以一种可视化的方式更加直接的展现出来,如何来达到这种可视化的展示呢?我们需要配合使用操作系统中集成的程序监控工具和 Java 中内置 ...

  8. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  9. 性能分析工具-PerfView

    Roslyn的PM(程序经理) Bill Chiles,Roslyn使用纯托管代码开发,但性能超过之前使用C++编写的原生实现,这有什么秘诀呢?他最近写了一篇文章叫做<Essential Per ...

随机推荐

  1. 我和Cpp的第一次正式约会

    今天是我和Cpp的第一次正式的约会,大一的时候学校开了Cpp课,可是那时候玩性未收,没有好好学习,而如今我主动约Cpp,是真的想跟他进一步走下去^_^,正在学习<C++ Primer>,每 ...

  2. django笔记1

    最近在博客园看来越来越多的关于python的文章,我看到时感觉特别的好,因为我也是一个特别喜欢python这门语言,喜欢python的简洁.干净,简洁而不失强大. 最近在学习django的Model模 ...

  3. [walkthrough] 在Asp.net MVC6 RC里使用NLog,并且把配置集成到config.json

    说明一下:本文基于随visual studio 2015 RC公开的DNX1.0.0-beta4,git上最新的aspnet的开发版本已经发生了很大变化. 首先,理论部分看[汤姆大叔的博客] 解读AS ...

  4. 纯Html+Ajax和JSP两者的优缺点

    我对jsp和ajax 一直比较困惑, jsp动态网页技术,在服务器端执行,能在网页中显示数据这是一种方式 .另一种方式是我打开一个网页(html),加载完成之后,使用js,ajax访问网络得到json ...

  5. 一个获取Android手机root权限的程序

    PermRoot.bat可以获取root权限. IsRoot.bat可以测试是否拥有root权限. UnRoot.bat可以清除root权限. 下载地址: http://pan.baidu.com/s ...

  6. Adobe Photoshop CS或者CC卸载不了怎么办?

    有木有没有遇到这个问题的同学?使用Adobe Creative Suite CleanerToo工具下载就好了~ 下载地址:http://pan.baidu.com/s/1pJ3aBsn

  7. windows 下安装nodejs及其配置环境

    第一步:下载安装文件下载nodejs,官网:http://nodejs.org/download/,我这里下载的是node-v0.10.28-x86.msi,如下图: 第二步:安装nodejs下载完成 ...

  8. Asynchronous

    http://sporto.github.io/blog/2012/12/09/callbacks-listeners-promises/ http://www.cnblogs.com/liuning ...

  9. SIM卡基础知识

    一:了解Sim卡和GSM网络登录步骤的基本知识 (一)名词解释: SIM卡(Subscriber Identity Module),即用户识别卡,它是一张符合GSM规范的“智慧卡”,SIM卡有大小之分 ...

  10. MySql的rpm安装

    MySQL 5.5(rpm格式)在Linux 上安装 Linux系统上安装MySQL 5.5prm 1.准备工作 从MySQL官网上分别下载mysql服务器端于客户端包. 下载步骤:Downloads ...