《Android应用性能优化》 第6章 性能评测和剖析
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章 性能评测和剖析的更多相关文章
- Linux性能优化 第五章 性能工具:特定进程内存
5.1 Linux内存子系统 在诊断内存性能问题的时候,也许有必要观察应用程序在内存子系统的不同层次上是怎样执行的.在顶层,操作系统决定如何利用交换内存和物理内存.它决定应用程序的哪一块地址空间将被放 ...
- Linux性能优化 第七章 性能工具:网络
7.1 网络I/O介绍 Linux和其他主流操作系统中的网络流量被抽象为一系列的硬件和软件层次. 链路层,也就是最低的一层,包含网络硬件,如以太网设备.在传送网络流量时,这一层并不区分流量类型,而仅仅 ...
- Linux性能优化 第六章 性能工具:磁盘I/O
6.1 磁盘I/O介绍 一般来说,Linux磁盘的每个分区要么包含一个文件系统,要么包含一个交换分区.这些分区被挂载到Linux根文件系统,该系统由/etc/fstab指定.这些被挂载的文件系统包含了 ...
- Linux性能优化 第三章 性能工具:系统内存
3.1内存性能统计信息 3.1.1 内存子系统和性能 和CPU相比,内存的读写速度都大大落后于CPU.为了弥补这个差距,通常CPU会采用高速缓存的机制(高cache). 3.1.2 内存子系统(虚拟存 ...
- Linux性能优化 第四章 性能工具:特定进程CPU
4.1进程性能统计信息 4.1.1. 内核时间VS用户时间 一个应用程序所耗时间最基本的划分是内核时间与用户时间.内核时间是消耗在Linux内核上的时间,而用户时间则是消耗在应用程序或库代码上的时间. ...
- Android性能优化之UI渲染性能优化
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本篇博客主要记录一些工作中常用的UI渲染性能优化及调试方法,理解这些方法对于我们编写高质量代码也是有一些帮助的,主要内容包括介绍CPU,GPU的职 ...
- Android性能优化之提高ListView性能的技巧
ListView优化一直是一个老生常谈的问题.无论是面试还是寻常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看怎样最大化的优化ListView的性能. 1.在adapter中的ge ...
- EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET
十年河东,十年河西,莫欺少年穷. EF就如同那个少年,ADO.NET则是一位壮年.毕竟ADO.NET出生在EF之前,而EF所走的路属于应用ADO.NET. 也就是说:你所写的LINQ查询,最后还是要转 ...
- 经典的性能优化最佳实践 web性能权威指南 读书笔记
web性能权威指南 page 203 经典的性能优化最佳实践 无论什么网络,也不管所用网络协议是什么版本,所有应用都应该致力于消除或减 少不必要的网络延迟,将需要传输的数据压缩至最少.这两条标准是经典 ...
- Java性能优化,操作系统内核性能调优,JYM优化,Tomcat调优
文章目录 Java性能优化 尽量在合适的场合使用单例 尽量避免随意使用静态变量 尽量避免过多过常地创建Java对象 尽量使用final修饰符 尽量使用局部变量 尽量处理好包装类型和基本类型两者的使用场 ...
随机推荐
- 解决 Amoeba连接mysql出错 解决方案
今天配置mysql的主从复制 用到了Amoeba.从安装到启动服务,我深深地体会到学运维的不易. 首先是 安装错误 的解决,连接错误 的兄弟可以直接往下拉. 安装错误 1.出现 JAVA_HOM ...
- 《Advanced Bash-scripting Guide》学习(五):检查一个可执行文件是否存在
本文所选的例子来自于<Advanced Bash-scripting Gudie>一书,译者 杨春敏 黄毅 ABS书上的例子是这样的: #!/bin/bash echo hello;ech ...
- doeNET Framework 农历 ChineseLunisolarCalendar
C:\Program Files (x86)\MSBuild\14.0\Bin\csc.exe test.cs # test.cs using System; using System.Diagnos ...
- MySQL 分区知识点(三)
前言: MySQL 分区后每个分区成了独立的文件,虽然从逻辑上还是一张表其实已经分成了多张独立的表, 从 information_schema.INNODB_SYS_TABLES 系统表可以看到每个分 ...
- L120 单词造句
The old lady sits on a mobile chair every morning.The book contains scandalous text. The current sur ...
- Codeforces Round #254(div2)B
就是看无向图有几个连通块,答案就是2n-num. 范围很小,就用矩阵来存图减少代码量. #include<iostream> #include<cstdio> #include ...
- Codeforces Round #253 (Div. 2)B(暴力枚举)
就暴力枚举所有起点和终点就行了. 我做这题时想的太多了,最简单的暴力枚举起始点却没想到...应该先想最简单的方法,层层深入. #include<iostream> #include< ...
- 【LeetCode】003. Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...
- C++对C语言的拓展(2)—— inline内联函数
C语言中有宏函数的概念.宏函数的特点是内嵌到调用代码中去,避免了函数调用 的开销.但是由于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语意差错. 1.内联函数基本概念 C++提供了 in ...
- [Unity3D]关于U3D贴图格式压缩
http://blog.sina.com.cn/s/blog_5b6cb9500102vi6i.html 因为有不少人都问过我压缩格式的问题,今天飞哥又重新提醒了一次.整理一下发个贴,以供大家查阅和讨 ...