1、时间测量

System.currentTimeMillis     精读和准确度可能不够;更改系统时间会影响结果;UTC时间1970/1/1 00:00:00到现在的毫秒数

System.nanoTime        没有定义参考时间,只能用来测量时件间隔;别的线程会导致测量时间不正确

Debug.threadCpuTimeNanos   只测量当前线程中所花费的时间,所以它的结果更准确;如果遥测梁的部分运行在多个线程上,要测量每个线程,并相加

System.currentThreadTimeMillis  

System.elapsedRealtime

System.uptimeMillis

需调用两次,求差值

2、方法调用跟踪

(1)Debug.startMethodTracing()  由Android提供,创建跟踪文件。用Traceview工具调试和分析应用。有四个变种:

startMethodTracing()

startMethodTracing(String traceName)

startMethodTracing(String traceName, int bufferSize)

startMethodTracing(String traceName, int bufferSize, int flags)

traceName  记录保存的文件名,就跟log.txt一样。如果已经存在会被截断。保证有权限和路径

bufferSize   文件大小(默认8MB)

flags       只有一个,Debug.TRACE_COUNT_ALLOCS。可以是0 或者 Debug.TRACE_COUNT_ALLOCS

对应的有  stopMethodTracing

实例代码

Debug.startMethodTracing("/sdcard/awesometrace.trace") ;

//需要跟踪的操作

BigInteger fN = Fibonacci.computeRecursivelyWithCache();

Debug.stopMethodTracing();

// 现在在/mnt/sdcard 目录下会有awesometrace.trace文件。 在DDMS中pull出  或者adb pull

(2)tools下有TraceView工具。命令行:traceview awesometrace.trace 启动

Name 方法名

Incl % 此方法中占的时间百分比(包含子方法)

Inclusive 此方法中所花的毫秒数(包含子方法)

Excl % 此方法中占的时间百分比(不包含子方法)

Exclusive 此方法中所花的毫秒数(不包含子方法)

Calls+RecurCalls/Total 调用和递归调用次数

Time/Call 平均每次调用时间

Parents 此方法的调用者

Children 此方法调用的方法

Parents while recursive递归时此方法的调用者

Children while recursive递归时此方法调用的方法

时间轴可以拖拽 方法和缩小

注:正常情况,方法可以被Dalvik的JIT编译器编译为机器码。

但是模拟跟踪时JIT编译器是禁用的。所以实际中,真实场景中花费的时间应该比显示出来的更少一些。

(3)在DDMS中启动TraceView。需要点击开始跟踪,再次点击之后停止。

3、Log

verbose(log.v)

debug(log.d)

info(log.i)

warning(log.w)

error(log.e)

assert(log.wtf)

Log.println(Log.DEBUG, TAG, "message") 相当于Log.d(...)

注:Log.wtf()方法在API8引入。但是Log.ASSERT在API 1就有了

因此要兼容 要使用Log.println(Log.VERBOSE, TAG, "message")而不是Log.wtf(...)

《Android应用性能优化》 第6章 性能评测和剖析的更多相关文章

  1. Linux性能优化 第五章 性能工具:特定进程内存

    5.1 Linux内存子系统 在诊断内存性能问题的时候,也许有必要观察应用程序在内存子系统的不同层次上是怎样执行的.在顶层,操作系统决定如何利用交换内存和物理内存.它决定应用程序的哪一块地址空间将被放 ...

  2. Linux性能优化 第七章 性能工具:网络

    7.1 网络I/O介绍 Linux和其他主流操作系统中的网络流量被抽象为一系列的硬件和软件层次. 链路层,也就是最低的一层,包含网络硬件,如以太网设备.在传送网络流量时,这一层并不区分流量类型,而仅仅 ...

  3. Linux性能优化 第六章 性能工具:磁盘I/O

    6.1 磁盘I/O介绍 一般来说,Linux磁盘的每个分区要么包含一个文件系统,要么包含一个交换分区.这些分区被挂载到Linux根文件系统,该系统由/etc/fstab指定.这些被挂载的文件系统包含了 ...

  4. Linux性能优化 第三章 性能工具:系统内存

    3.1内存性能统计信息 3.1.1 内存子系统和性能 和CPU相比,内存的读写速度都大大落后于CPU.为了弥补这个差距,通常CPU会采用高速缓存的机制(高cache). 3.1.2 内存子系统(虚拟存 ...

  5. Linux性能优化 第四章 性能工具:特定进程CPU

    4.1进程性能统计信息 4.1.1. 内核时间VS用户时间 一个应用程序所耗时间最基本的划分是内核时间与用户时间.内核时间是消耗在Linux内核上的时间,而用户时间则是消耗在应用程序或库代码上的时间. ...

  6. Android性能优化之UI渲染性能优化

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本篇博客主要记录一些工作中常用的UI渲染性能优化及调试方法,理解这些方法对于我们编写高质量代码也是有一些帮助的,主要内容包括介绍CPU,GPU的职 ...

  7. Android性能优化之提高ListView性能的技巧

    ListView优化一直是一个老生常谈的问题.无论是面试还是寻常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看怎样最大化的优化ListView的性能. 1.在adapter中的ge ...

  8. EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET

    十年河东,十年河西,莫欺少年穷. EF就如同那个少年,ADO.NET则是一位壮年.毕竟ADO.NET出生在EF之前,而EF所走的路属于应用ADO.NET. 也就是说:你所写的LINQ查询,最后还是要转 ...

  9. 经典的性能优化最佳实践 web性能权威指南 读书笔记

    web性能权威指南 page 203 经典的性能优化最佳实践 无论什么网络,也不管所用网络协议是什么版本,所有应用都应该致力于消除或减 少不必要的网络延迟,将需要传输的数据压缩至最少.这两条标准是经典 ...

  10. Java性能优化,操作系统内核性能调优,JYM优化,Tomcat调优

    文章目录 Java性能优化 尽量在合适的场合使用单例 尽量避免随意使用静态变量 尽量避免过多过常地创建Java对象 尽量使用final修饰符 尽量使用局部变量 尽量处理好包装类型和基本类型两者的使用场 ...

随机推荐

  1. ie 元素兼容性总结

    css 属性元素 2.z-index 正常按自身层级决定显示顺序,在ie6 7 还需要依赖于父级的层级决定,排布在后边的元素排在前面.后来者居上覆盖前者. IE6,7支持inline元素转换成inli ...

  2. SQL Server 性能优化之RML Utilities:快速入门(Quick Start)(1)

      SQL Server 性能优化之RML Utilities:快速入门(Quick Start)(1) 安装Quick Start工具 RML(Replay Markup Language)是MS ...

  3. 51nod 1131 数列

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1131 1131 覆盖数字的数量 基准时间限制:1 秒 空间限制:1310 ...

  4. mac下用brew安装mongodb

    分享到:QQ空间新浪微博腾讯微博人人网微信 mac 下安装mongoDB一般俩种方法. (1)下载源码,解压,编译,配置,启动 比较艰难的一种模式. (2)brew install mongodb , ...

  5. python_编码集的介绍

    一.unicode的解释来自百度百科 1.ASCII    最知名的可能要数被称为ASCII的7位字符集了.它是美国标准信息交换代码(American Standard Code for Inform ...

  6. 15_游戏编程模式EventQueue

    #### 两个例子 .GUI event loop ``` while (running) { // 从事件队列里获取一个事件 Event event = getNextEvent(); // Han ...

  7. switch case 语法

    switch (条件){ case 第一种: 执行语句 break: case 第二种情况: 执行语句 break: default: 执行语句: break: }

  8. HttpServletRequest获取请求得URL信息

    request对象中包含的是请求信息,当我们在浏览器地址栏上输入:http://localhost:8080/Example/AServlet?username=zhangsan,这段地址也会作为请求 ...

  9. grpc asp.net core 集成时一些配置的说明

    一  什么是grpc google出了一款分布式通讯框架:grpc.我想这也不是新的东西了,在13年的一个项目中,用在了数据层和业务端之间的通讯上,当时并没有觉得怎么样,因为wcf很轻松的也可以可以实 ...

  10. redis3.2.11 安装

    wget http://download.redis.io/releases/redis-3.2.11.tar.gz [root@hdp01 src]# .tar.gz -C /opt/ [root@ ...