Android开发中的性能优化---工具

  Google为Android开发者提供了很多开发工具都在SDK中的tools目录下

 

1.布局分析工具---hierarchyviewer

 

1.1 简介

  这个工具是专门用来分析视图布局的,能够从整体上查看出布局是否合理,反馈每个View的Measure、Layout、Draw的时间信息,以及是否会对性能产生影响

 

1.2 使用

  以夜神模拟器中的浏览器来做例子 
   
  title

  title 
   
  title
   
  如图2显示的是View树(这个是重点),能够通过这个页面来观察程序的页面的情况,最主要使用的就是图中箭头指示的Profile Node功能,当鼠标点击View树中的某个View后,这个功能才能够点击,点击后,View树就会显示出当前View以及它下面的子View的所有Measure、Layout、Draw时间及性能信息 
   
  title 
   
  唯一需要注意的是那三个圆点,按顺序和Measure、Layout、Draw三个方法相对应,总共有红黄绿三种颜色, 
  这三种颜色代表的是相对性能而不是绝对性能,也就是说,它是和其它View相互比较后得出的性能结果,绿色表示该阶段的执行速度至少比其它View快50%,黄色表示比其它View慢50%(这幅图里没黄色@_@!),红色表示相对于其它View速度非常慢了, 
  但有一点是,这些颜色仅仅也就是相对性能,也就是实际情况有可能是非常快的,所以具体还是要看这个View所显示的三种方法的执行时间,这个才是绝对性能。 
  如下图,三个方法的总时间加起来以及超过了16ms,所以它的布局渲染速度就肯定会有卡顿现象 
   
  title 
   
  下面这张图虽然Measure阶段显示的相对性能是红色,但它总共才花了2.+ms,比Draw的速度还要快,并且总共时间是5.+ms,所以它的实际渲染速度还是非常快的 
   
  title

 

2.方法执行分析工具---TraceView

 

2.1 简介

  这个工具能够让你知道你代码中每个方法的执行效率,调用次数等

 

2.2 使用

  在Android Studio中的工具栏能直接打开 
  title 
   
  或者在tools下打开 
  title 
  title 
  title 
   
  选择OK,然后开始操作设备来执行所要观测的方法,然后再点一下就停止 
  title 
   
  title
   
  随便选中时间线图表,下面的统计表格就会打开相应的统计,以绿色为例,首先下图中两个箭头一个是parent,一个是children, 
  parent表示直接调用的方法,而children表示该parent方法下调用的其它方法,一般蓝色背景的就是parent,而黄色背景的就是children。 
  title
   
  红框部分的列名表示,可以看到有的同一个名称有两个,意思一样只是单位不一样,一个表示的是毫秒数,一个表示的是百分比。 
   
  title
   
  1.Incl Cpu Time: 方法执行所占CPU的总时间,包含内部调用其它方法的时间 
  2.Excl Cpu Time: 方法执行所占CPU的总时间,不包含内部调用的其它方法的时间 
  3.Incl Real Time: 方法执行的真实时间,包含内部调用其它方法的时间 
  4.Excl Real Time: 方法执行的真实时间,不包含内部调用其它方法的时间 
  5.Call+RecurCalls/Total: 方法调用次数+递归调用次数 / 总次数 
  6.Real Time/Call:方法被调用的真实时间 / 总次数 
  7.Cpu Time/Calll: 方法占Cpu时间/总次数 
   
  Ps: 
    还是比较见名知意的,Incl其实就是Include包括,Excl就是Exclude不包括,剩余的应该都能看懂@_@!

 

3.内存工具---HeapViewer

 

3.1 简介

  通过这个工具能够知道程序在特定时间的内存使用状况

 

3.2 使用

  这个和TraceView的所处位置很像 
  title 
   
  title
   
  title
   
  title
  上图中以class object为例, 表示的就是object类型在堆内存中数量有186个,总共占堆内存大小约为140.094KB

 

4.内存分配追踪器---Allocation Tracker

 

4.1 简介

  虽然HeapViewer显示了每次程序在堆内存中的分配,但是无法通过它知道具体的执行情况,所以需要一个追踪器来获取这些数据

 

4.2 使用

  title 
   
  点击开始后,就可以操作设备了,然后操作完再次点击这个按钮就会结束追踪,要稍等一段时间就会将结果分析出来 
  在Stduio上方显示,基本都是以ddms开头的文件名 
  title 
   
  下面这张图从左到右每列意思为: 
  1.Allocation Order:表示分配所执行的时间 
  2.Allocated Class:表示分配的类型 
  3.Thread Id:表示分配的线程 
  4.Allcation Site:表示具体分配的方法 
   
  title 
  

 

5.字节对齐工具---zipalign

 

5.1 简介

  这个工具能够让打包apk进行以4字节为边界的字节对齐,在代码篇已经有简单介绍,想要知道详细的还是要自己搜去,想要彻底了解它还要对Liunx系统比较熟悉,此处不再废话。 
  需要注意的是,一定要在签名后进行对齐,否则签名时会有取消对齐的步骤 
  

 

5.2 使用

  这个工具在SDK的build-tools下面 
  title 
  在当前目录下打开命令行,然后输入 
   zipalign -v 4 优化前App的名字.apk 优化后App的名字.apk 
   
   还有一个命令是检查某个App是否已经被压缩对齐 
   zipalign -c -v 4 App的名字.apk

  当然了,Google怎么可能让开发人员没事儿干就去敲命令行? 
  所以 
  title 
   
  (是不是感觉签名说的命令行的方法是废话了 @_@!) 
  

 

6.没必要说但是很有用的

  Studio中这几个工具应该都知道干嘛的,所以不再废话 
title

 

7.第三方内存泄漏检测工具---LeakCanary

  关于这个工具,很早就出现了,使用方式就不再赘述,但是有一个个人的使用方式推荐 
  Monkey测试 + LeakCanary

  利用Mokey测试的随机特性, 加上LeakCanary, 简直天衣无缝
 
 
如有错误, 敬请指正, 感激不尽!
posted @ 2018-02-05 19:59  予有荣焉  阅读(285)  评论(0编辑  收藏  举报