Android性能优化——工具篇

Android性能优化是Android开发中经常遇见的一个问题,接下来将对Android性能优化方面的知识点做一个简单的梳理和总结,将从工具和代码两方面进行梳理。所谓工欲善其事必先利其器,本文首先来看一下Android性能优化有哪些得力的工具。

TraceView

traceview是Android SDK中自带的一个工具,可以对应用中方法调用耗时进行统计分析,是Android性能优化和分析时一个很重要的工具。traceview位于SDK下的tools目录中,使用时可以在cmd窗口运行traceview命令,也可以在ddms中使用,我个人比较偏向于后一种方式,比较方便易操作,不需要修改代码。

使用方法:

  • 方法一:在相应进行traceview分析的开始位置和结束位置分别调用startMethodTracing和stopMethodTracing方法,可见下面的示例代码:
public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Debug.startMethodTracing();
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		Debug.stopMethodTracing();
	}
}

在结束后会生成".trace"文件,然后 通过命令traceview *.trace对数据文件进行分析。startMethodTracing共有6个重载的方法,在调用时可以根据需要进行调用。如果采用不带参数的方法,产生的“.trace"文件默认将存放到外置存储器根目录下(/sdcard/),名为”dmtrace.trace",为了方便这里建议自定义trace的名称(startMethodTracing(String traceName))。

  • 方法二:traceview也可以在ddms中直接使用,即在ddms中在选中某个要进行监控的进程后,点击如图所示的小图标开始监控,在监控结束时再次点击小图标,ddms会自动打开traceview视图:

这两种使用方式,各有优缺点:第一种监控过程比较精确,但需要修改代码;第二种监控使用方便,不需要修改代码,但步入第一种精确。我个人在使用时一般比较偏向第二种使用方式。

视图解读:

下面的视图是我在ddms中监控com.tencent.mobileqq进程(随便选的一个)生成的。

可以看出整个traceview视图分为上下两大部分,上半部分被称为时间轴面板(Timeline Panel),下半部分被称为分析面板(Profile
Panel)

  • 时间轴面板

界面上方的尺子代表了MethodTracing的时间段(从Debug.startMethodTracing()到Debug.stopMethodTracing()的时间)。

每个线程的函数执行时间图处于和线程名同一行的右侧。

注1:线宽度代表执行该函数本身操作所用的时间。

注2:函数所调用的子函数时间线夹杂在该函数本身操作所用的时间线之间。

注3:时间线的高度不知道有什么意义。

注4:函数本身是嵌套的。

注5:每行下面粗的线段标注了Profile Panel中被选中函数调用所消耗的时间段。每个线段对应一次函数的运行。

  • 分析面板

Exclusive time是该函数本身基本操作(不包括子函数调用)的时间。

Inclusive time是该函数调用所用的时间(包括子函数调用)的时间。

列1:"Name"表示函数名。

双击函数名,可以看到在上半界面是时间轴面图(Timeline Panel)看他的所消耗的时间段。(用粗的线段标注)。

双击函数名左边的"+"展开后可以看到,该函数的"parents"和"children"

列2:"incl%"表示函数的Inclusive time在整个MethodTracing时间里占的百分比。

列3:"Inclusive"表示Inclusive time。

列4:"Excl%"表示函数的Exclusive time在整个MethodTracing时间里占的百分比。

列5:"Exclusive"表示Exclusive time。

列6:"Calls+RecurCalls/Total"表示对函数的调用次数(包括递归调用)。如图2的nativeFinished()那列为"14+0"表示14次非递归调用,0次递归调用.

列7:新的版本(比如2.1)还有"time/calls"表示平均的调用时间(即Inclusive time/ total calls)。如图3。来自google文档的图2感觉有老了。

注:如果函数A调用函数B那么函数A称为函数B的"parents",函数B称为函数A的"children."

Google关于traceview工具的介绍可参考http://developer.android.com/intl/zh-cn/tools/debugging/debugging-tracing.html

Android性能优化——工具篇

时间: 2024-10-06 11:00:53

Android性能优化——工具篇的相关文章

Linux/Android 性能优化工具 perf

/***************************************************************************** * Linux/Android 性能优化工具 perf * 说明: * 之前一直在找Android上的性能优化工具,但是一直不知道应该找哪方面的关键字, * 今天在看Android源代码目录的时候看到linux-tools-perf,查了点相关资料,最后 * 发现这好像就是我一直在找的查看系统性能的工具,目前没有验证任何东西,先记录 * 下

Android性能优化工具之Systrace

本文大部分内容来自:http://www.androidperformance.com/android-performance-tools-systrace-1.html?utm_source=tuicool Systrace是Android4.1中新增的性能数据采样和分析工具.它可帮助开发者收集Android关键子系统(如surfaceflinger.WindowManagerService等Framework部分关键模块.服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,

[Android 性能优化系列]内存之终极篇--降低你的内存消耗

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/articles/memory.html 在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家 建议大家在看本文之前先去我的博客看看 [Android 性能优化系列]内存之基础篇--Andr

[Android 性能优化系列]布局篇之减少你的界面层级

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/improving-layouts/optimizing-layout.html 在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家 性能优化之布局篇: [Android 性能优化系列]布

【转】Android性能优化之布局优化篇

转自:http://blog.csdn.net/feiduclear_up/article/details/46670433 Android性能优化之布局优化篇 分类: andorid 开发2015-06-29 16:28 238人阅读 评论(0) 收藏 举报 性能布局viewStubinclude布局优化 目录(?)[-] Hierarchy View检测布局嵌套层次 显示GPU过度绘制 懒加载布局 ViewStub Android Lint 工具 怎样才能写出优秀的Android App,是

【朝花夕拾】Android性能优化篇之(四)Apk打包

前言 APK,即Android Package,是将android程序和资源整合在一起,形成的一个.apk文件.相信所有的Android程序员是在IDE的帮助下,完成打包轻而易举,但对打包流程真正清楚的可能并不多.本章的内容比较简单,也是非常基础的内容,但是对理解android应用的结构却有很大的帮助.笔者写这篇文章的目的,一方面是为了弥补这方面的盲点,回顾和梳理apk打包方面的理论知识点:第二方面,是为了给后续写Android虚拟机知识做铺垫,进而去研究android的性能优化,这也是把这篇文

【朝花夕拾】Android性能优化篇之(一)序言及JVM篇

序言        笔者从事Anroid开发有些年头了,深知掌握Anroid性能优化方面的知识的必要性,这是一个程序员必须修炼的内功.在面试中,它是面试官的挚爱,在工作中,它是代码质量的拦路虎,其重要性可见一斑.在团队中,性能优化的工作又往往由经验丰富的老师傅来完成,可见要做好性能优化,绝不是一件容易的事情. 性能优化方面涉及的知识点比较广,有理论基础知识,也有实际操作技能,笔者将通过一系列的文章来进行整理,将主要包括Java虚拟机.内存分配.垃圾回收,android虚拟机.进程管理.内存优化.

Android性能调优篇之Hierarchy Viewer工具的使用

详细内容请查看我的简书地址:Android性能调优篇之Hierarchy Viewer工具的使用 或者我的个人博客地址:Android性能调优篇之Hierarchy Viewer工具的使用

Android性能调优篇之UI布局优化

详细内容请查看我的简书地址:Android性能调优篇之UI布局优化 或者我的个人博客地址:Android性能调优篇之UI布局优化