《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修饰符 尽量使用局部变量 尽量处理好包装类型和基本类型两者的使用场 ...
随机推荐
- enter回车---焦点切换
$(function(){ $('.enter').bind('keydown',function(e){ var inputs = $('.enter_cash'); var key = e.whi ...
- java: InputStreamReader将字节的输入流变成字符的输入流,OutputStreamWriter将字符的输出流变成字节的输出流
InputStreamReader:将字节的输入流变成字符的输入流, OutputStreamWriter:将字符的输出流变成字节的输出流 //将缓冲区的内容读取,可以一次读取 //可以接收键盘的输入 ...
- Model compatibility cannot be checked because the database does not contain model metadata. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions
Model compatibility cannot be checked because the database does not contain model metadata. Ensure t ...
- jquery判断密码是否一致?
密码 请输入密码 重新输入密码 请输入新密码 <input type="text" id="btn0"> 密码 <span class=&qu ...
- SpringMVC_总结_03_SpringMVC相关注解
一.前言 在前面的小节中,我们配置了注解驱动和自动扫描包,然后就可以使用SpringMVC相关注解了. 二.@Controller @Controller用来修饰类,源码如下: package org ...
- DataTable的用法
在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.DataTable简 ...
- luogu 3375 KMP模板题
#include<bits/stdc++.h> using namespace std; ,M = ; int next[N]; void getNext(char s[]) //找nex ...
- CCEditBox
EditBox 创建添加 以及 一些函数参数的解析 #include "GUI/CCEditBox/CCEditBox.h" #include "GUI/CCContro ...
- SQL夯实基础(三):聚合函数详解
一.GROUP BY Having 聊聚合函数,首先肯定要弄清楚group by 和having 的用法. SELECT id, COUNT(course) as numcourse, AVG(sc ...
- ERR_PTR PTR_ERR IS_ERR ERROR
在linux-x.xx/include/uapi/asm-generic/errno-base.h和errno.h里分别定义了返回错误的信息. errno-base.h: #ifndef _ASM_G ...