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

1、TraceView

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

使用方法:

  • 方法一:在相应进行traceview分析的开始位置和结束位置分别调用startMethodTracing和stopMethodTracing方法,可见下面的示例代码:
  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. @Override
  9. protected void onDestroy() {
  10. super.onDestroy();
  11. Debug.stopMethodTracing();
  12. }
  13. }

在结束后会生成".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的一张图:
 

摘自:http://blog.csdn.net/zhgxhuaa/article/details/24870853

(转)Android性能优化——工具篇的更多相关文章

  1. android 性能优化-工具篇

    一.Traceview 使用TraceView主要有两种方式: 1.直接打开DDMS,选择一个进程,然后按上面的“Start Method Profiling”按钮,等红色小点变成黑色以后就表示Tra ...

  2. Linux/Android 性能优化工具 perf

    /***************************************************************************** * Linux/Android 性能优化工 ...

  3. android 性能优化-电量篇

    消耗电量的几个主要原因.功能:1.大数据量的网络传输(网络)2.不停的网络切换(网络)3.解析大量的数据(CPU) 关于网络方面的优化: .网络请求之前,检查网络连接.没有网络连接不进行请求 .判断网 ...

  4. Android 性能优化——内存篇

    一.android官方一些内存方面的内存tips 1.避免创建不必要的对象. 如尽量避免字符串的加号拼接,可以使用StringBuilder来拼接. 如果需要TextView设置多个字符串片段,可以使 ...

  5. Android性能优化工具之Systrace

    本文大部分内容来自:http://www.androidperformance.com/android-performance-tools-systrace-1.html?utm_source=tui ...

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

     转自:http://blog.csdn.net/feiduclear_up/article/details/46670433 Android性能优化之布局优化篇 分类: andorid 开发2015 ...

  7. Android 性能优化之工具和优化点总结

    Android性能优化学习 最近公司主抓性能优化工作,借此春风也学习到了许多Android性能优化方面的知识.由于组内队友的给力,优化的成果也是比较喜人.同时也学习和实践了不少知识,特此记录. 1.性 ...

  8. Android性能优化系列总篇

    目前性能优化专题已完成以下部分: 性能优化总纲——性能问题及性能调优方式 性能优化第四篇——移动网络优化 性能优化第三篇——Java(Android)代码优化 性能优化第二篇——布局优化 性能优化第一 ...

  9. Android性能优化第(三)篇---MAT比Menmery Monitor更强大

    作者 LooperJing 2016.11.17 16:42* 字数 1687 阅读 1603评论 3喜欢 21 在Android性能优化第(一)篇---基本概念中讲了JAVA的四大引用,讲了一下GC ...

随机推荐

  1. 23.FutureTask基本操作总结

    1.FutureTask简介 在Executors框架体系中,FutureTask用来表示可获取结果的异步任务.FutureTask实现了Future接口,FutureTask提供了启动和取消异步任务 ...

  2. 十五 web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础

    在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块,然后将网页数据通过lxml下的etree转化为treedata的形式 urllib库中使用xpath表 ...

  3. tkinter模块常用参数

    tkinter模块常用参数   1.使用tkinter.Tk() 生成主窗口(root=tkinter.Tk()):root.title('标题名')    修改框体的名字,也可在创建时使用class ...

  4. js排序算法06——希尔排序

    希尔排序本质是一种插入排序,由一位叫希尔的大神提出得名,其基本思想是将数组分组进行插入排序,每次消除不止一个逆序对,这样就提高了插入排序的效率.最后一步进行一间隔的插入排序,此时数组已经基本有序.代码 ...

  5. 转载:left join和left semi join的联系和区别

    1.联系 他们都是 hive join 方式的一种,join on 属于 common join(shuffle join/reduce join),而 left semi join 则属于 map ...

  6. linux oracle11g 数据 导入到10g数据库

    说明: 原用户名和密码:test/test  目标用户名和密码:test01/test 11G 服务器: 1.创建dmp文件存储目录 # mkdir -p /tmp/backup # sqlplus ...

  7. 20165202 2017-2018-2 《Java程序设计》第1周学习总结

    20165202 2017-2018-2 <Java程序设计>第1周学习总结 教材学习内容总结 Ubuntu环境下安装JDK 简单Java程序编写 反编译器javap.exe Git安装及 ...

  8. 熟悉linux命令

    <鸟哥的linux私房菜>这本书终于看到了敲命令行这块了,有点小激动,打开虚拟机,开始~~~敲!!! 登录界面,用户名密码~~~ 登录成功,下面开始熟悉一下,linux的常见命令了: li ...

  9. UE4 Sequencer的事件调用

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/73554691 作者:car ...

  10. C# 读写opc ua服务器,浏览所有节点,读写节点,读历史数据,调用方法,订阅,批量订阅操作

    OPC UA简介 OPC是应用于工业通信的,在windows环境的下一种通讯技术,原有的通信技术难以满足日益复杂的环境,在可扩展性,安全性,跨平台性方面的不足日益明显,所以OPC基金会在几年前提出了面 ...