Android性能优化——工具篇

转载 2016年05月31日 14:33:28

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


1、TraceView

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

使用方法:

  • 方法一:在相应进行traceview分析的开始位置和结束位置分别调用startMethodTracing和stopMethodTracing方法,可见下面的示例代码:
[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public class MainActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         setContentView(R.layout.activity_main);  
  6.         Debug.startMethodTracing();  
  7.     }  
  8.   
  9.     @Override  
  10.     protected void onDestroy() {  
  11.         super.onDestroy();  
  12.         Debug.stopMethodTracing();  
  13.     }  
  14. }  
在结束后会生成".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."



2、APT

APT工具是腾讯公司内部开发使用的一款性能分析工具,主要可以用来对进程的CPU和内存进行监视很分析,使用非常方便,下面是截图:


对于APT的原理比较简单,就是利用top和dump命令抓取数据,所以,这里如果我们不用APT,自己写个小程序调用top也是一样的。对于APT的使用比较简单,一目了然,折利率不再赘述。

APT软件现在已经开源,可参考:https://code.csdn.net/Tencent/apt/

3、System Information

System Information是集成在DDM中的一款工具,可以用用来对CPU、内存和帧进行抓取,与APT不同的是System Information抓取的是整个系统的某个瞬间信息。先是其使用时的截图,具体使用方法比较简单,不再赘述。



4、MAT

MAT工具可谓大名鼎鼎,是用来进行内存泄露分析的主要工具。MAT Eclipse 插件的安装地址为:http://download.eclipse.org/mat/1.3.1/update-site/。关于MAT的使用这里就不介绍了,网上关于它的材料到处都是,没有必要重复造车轮子。这里要说明的一点事:在通过dump生成prof文件时,生成的文件MAT不能直接使用,必须通过hprof-conv命令进行转换处理。如果使用MAT的Eclipse插件,则不需要转化,Eclipse会 自动处理,因此建议采用后一种方式。下面是MAT的一张图:



TraceView android 性能优化工具

TraceView界面 现来看一下整个界面的图,整个界面包括上下两部分,上面是你测试的进程中每个线程的执行情况,每个线程占一行;下面是每个方法执行的各个指标的值 上面一部分是你测试进程的中每个线程...
  • ccccdddxxx
  • ccccdddxxx
  • 2015年10月18日 20:25
  • 1141

Android代码优化工具

1.前言:在我们平时项目开发中,经常会写一些不严谨的代码或者一些比较低级的错误代码,但是这些错误往往很难被发现,这样就导致了我们的项目中会隐藏了很多影响性能甚至是导致闪退的错误代码,于是许多响应的检测...
  • yulyu
  • yulyu
  • 2017年02月10日 19:53
  • 6529

Android性能优化-MAT工具的简单使用

1.MAT的简单介绍MAT(Memory Analyzer Tool) 是基于heap dumps来进行内存分析的工具,一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分...
  • qq_21430549
  • qq_21430549
  • 2016年04月17日 15:10
  • 4976

Android性能优化——工具篇

Android性能优化是Android开发中经常遇见的一个问题,接下来将对Android性能优化方面的知识点做一个简单的梳理和总结,将从工具和代码两方面进行梳理。所谓工欲善其事必先利其器,本文首先来看...
  • u011732740
  • u011732740
  • 2016年05月31日 14:33
  • 790

Android Studio TraceView性能优化分析

DDMS 打开traceview 进行性能分析
  • qq_28195645
  • qq_28195645
  • 2016年06月22日 17:54
  • 5619

android性能优化----工具篇

Android性能优化—-工具篇概览      Android 提供了多种工具帮助开发者调试android程序,保证应用的性能和稳定,如果你知道某一个工具,那么百度或者google会查到很多详细的介绍...
  • u010255127
  • u010255127
  • 2015年10月15日 00:38
  • 1308

Android性能优化之多线程

本文主要介绍了AsyncTask, HandlerThread, IntentService与ThreadPool分别适合的场景以及各自的使用注意事项。 一,线程性能 在程序开发的实践当中,为了让程序...
  • qq_33336787
  • qq_33336787
  • 2016年08月05日 15:46
  • 211

Android 性能优化——启动时间优化指南

启动时间优化毫无疑问,应用的启动速度越快越好。 本文可以帮助你优化应用的启动时间:首先解释启动过程内部机制;然后讨论如何分析启动性能;最后,描述了一些常见的影响启动时间的问题,并就如何解决这些问题给...
  • lgz_ei
  • lgz_ei
  • 2017年04月11日 00:38
  • 1668

操作系统服务:time时间模块+datetime模块

http://blog.csdn.net/pipisorry/article/details/45271423Python提供了多个内置模块用于操作日期时间,像calendar,time,dateti...
  • pipisorry
  • pipisorry
  • 2015年04月25日 16:36
  • 2153

Android性能优化——工具篇

Android性能优化是Android开发中经常遇见的一个问题,接下来将对Android性能优化方面的知识点做一个简单的梳理和总结,将从工具和代码两方面进行梳理。所谓工欲善其事必先利其器,本文首先来看...
  • zhgxhuaa
  • zhgxhuaa
  • 2014年05月08日 17:54
  • 14695
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android性能优化——工具篇
举报原因:
原因补充:

(最多只允许输入30个字)