Android性能优化(一):TraceView

简介:  最近,我准备好好研究一下Android性能优化方面的相关知识,准备从应用流畅度开始,边看《移动App性能评测与优化》边自己实践,希望可以补足一下自己在优化这方面的空白。
+关注继续查看

 最近,我准备好好研究一下Android性能优化方面的相关知识,准备从应用流畅度开始,边看《移动App性能评测与优化》边自己实践,希望可以补足一下自己在优化这方面的空白。
 工欲善其事必先利其器,我先学习了TraceView这个大神器的使用方法。下面就来总结一下。
 为了节省你的时间,本文主要内容如下:

  • TraceView两种使用方法
  • TraceView各项数据的含义

TraceView使用方法

 TraceView有两种使用方法,一种是在DDMS上手动操作进行使用,还有一种方法是使用代码生成trace文件,然后在使用DDMS打开文件。我们以检测一个启动很慢的Activity为例来介绍。在应用中点击个人中心按钮,跳转到个人中心页面,但是这个过程有明显的卡顿。我们分别使用两个方法来检测这个过程。
 第一种方法是最简单也是最常用的使用方法。点击DDMS左侧的Start Method Profiling按钮(具体位置如图1,三个小箭头和红点的那个按钮)。

图1:TraceView启动按钮位置

 然后点击个人应用中心按钮,等待个人中心页面显示出来,然后再次点击那个按钮,DDMS就会自动显示出如图2的界面。

 第一种方法很方便,但是精准度不够,当你希望有更加精确的检测时,你就可以使用第二种方法。在你要检测的代码过程中开始调用android.os.Debug.startMethodTracing()方法,然后在过程的末尾调用android.os.Debug.stopMethodTracing()方法。等到这段代码执行完之后,系统就会在手机的/sdcard文件夹下生成一个trace文件。你可以使用DDMS或者adb将其复制到你的电脑上,然后用DDMS工具打开。

图2:TraceView数据展示

TraceView各项数据分析

 我很久之前就接触过TraceView,但是当时并没有完全理解它所展示的所有数据的具体含义,没有感受到它的强大之处。下面,我总结一下它的各项数据的含义和自己的理解。
 首先,我们可以看到一行表头,其中不同的项代表不同的内容。我们接下来一一进行解释。

Incl Cpu Time

Incl Cpu Time表示这个函数从开始被执行到执行结束的时间。这个时间包括这个函数中调用其他函数所花费的时间。也就是说,这个函数和函数中所有子函数的一共执行时间。举个例子:

  public void example() {
    a();
    b();
  }

Incl Cpu Time就表示example函数执行的总时间,假如说example方法执行的时间为10ms,函数a执行了3ms,方法b执行了6ms,调用example方法的函数执行的总时间为100ms。最终计算出来的Incl Cpu Time比率为:

  • example 10%
  • a 30%
  • b 60%

 通过这个指标,我们可以看到一个函数的所有时间的占比,这个指标一般不会用到,因为我们一般都先查看所有函数的Excl Cpu Time指标。但是当你需要精确了解各个函数总执行时间并优化时,你还是需要先从这个函数入手。比如说优化应用冷启动时间,这个时候并没有明显的有较长Excl Cpu Time的函数,你需要对目标函数进行一点一点的分析和优化。而不是像寻找明显卡顿原因时的直接找Excl Cpu Time指标最大的函数。

Excl Cpu Time

 理解了Incl Cpu Time,我们就可以轻易理解这个指标的含义啦。还是上边那个例子。我们可以计算出各个函数的Incl Cpu Time比例。

  • example (10 - 3 -6)/100 = 1%
  • a 30%
  • b 60%
     从例子上来看,一个方法的Excl Cpu Time等于它的Incl Cpu Time减去它所有子函数的Incl Cpu Time

Incl Real Time 和 Excl Real Time

 对这两条指标的理解主要涉及到对Cpu timeReal time的理解。Cpu Time 应该是某个方法占用CPU的时间;而Real Time 应该是这个方法的实际运行时间。因为Cpu的上下文切换,阻塞,等待等原因,Real Time 一般长于Cpu Time。

Calls+Recur Calls/Total

 这个指标表示这个方法执行的总次数。Calls表示这个函数的调用次数,而Recur Calls表示递归调用次数。

Cpu Time/Calls Real Time/Calls

 这两个指标表示方法的每次调用的平均执行时间。

后记

 有关TraceView的内容就介绍到这里,了解工具的使用只是开始,我们还需多在实践中应用这些工具,比如开发过程中发现有页面比较卡顿,那么我们就可以使用TraceView去检测一下!!!

相关文章
|
10天前
|
Java 数据库 Android开发
性能提示-流畅运行的Android应用
性能提示-流畅运行的Android应用
7 0
|
2月前
|
编解码 监控 前端开发
Android平台GB28181设备接入端如何降低资源占用和性能消耗
Android平台GB28181设备接入端如何降低资源占用和性能消耗?
|
11月前
|
机器学习/深度学习 安全 测试技术
阿里云EMAS-专家测试服务iOS和Android上百种机型性能、兼容及UI等测试
阿里云EMAS测试专家有着集团内部多个日活过亿规模APP经验,提供EMAS专家测试,客户只需提交测试需求,从用例设计、脚本录制、海量机型测试、整理测试结果、48小时输出专家测试报告均由阿里云EMAS测试专家一站式服务完成。覆盖功能测试、深度兼容测试、性能测试、UI适配测试以及隐私合规检测等,帮助用户以更低成本获得高质量的全面测试能力,可用于APP正式发版前验收,规避手机APP上线前或发版过程中各类隐患。
328 0
阿里云EMAS-专家测试服务iOS和Android上百种机型性能、兼容及UI等测试
|
监控 Java 数据挖掘
Android线上轻量级APM性能监测方案
Android线上轻量级APM性能监测方案
710 0
Android线上轻量级APM性能监测方案
|
Java 数据库 Android开发
Android性能优化指南
Android性能优化指南
112 0
|
API Android开发 开发者
❤️Android 性能优化之启动优化❤️
背景 用户希望应用能够快速打开。启动时间过长的应用不能满足这个期望,并且可能会令用户失望。轻则鄙视你,重则直接卸载你的应用。 用户不会在乎你的项目是不是过大,里面是不是有很多初始化的逻辑。他只在乎你-慢了。 所以咱们这篇文章有两个目的: 启动速度提升(用户眼中的大神就是你) 优化代码逻辑和规范(别让自己成为继任者中的XX) 今天咱们就来了解一下应用启动内部机制和启动速度优化。
171 0
❤️Android 性能优化之启动优化❤️
|
测试技术 调度 Android开发
Android性能加压方案:提高概率性问题的复现几率
Android性能加压方案:提高概率性问题的复现几率
231 0
Android性能加压方案:提高概率性问题的复现几率
|
XML 前端开发 数据可视化
Android View使用、自定义和性能优化
View的继承关系 创建View对象 使用XML布局定义View,再用代码控制View 举例 1.创建activity_view.xml文件 2.加载布局文件、关联控件 3.在获得XML布局文件中的视图对象时需要注意下面几点: 4.用代码控制视图 使用代码的方式来创建View对象 实例 1.获得当前的容器视图对象 2.获得或创建待添加的视图对象 3.将相应的视图对象添加到容器视图中 总结 自定义View 为什么要自定义View 自定义View的基本方法 需要用到的两个对象 自绘控件View实例 1、直接继承View类 2、在布局 XML 文件中使用自定义View 性能优化
239 0
Android View使用、自定义和性能优化
|
Java 调度 开发工具
关于Android性能优化的几点建议,2年以上经验必看
关于Android性能优化的几点建议,2年以上经验必看
|
Android开发
Android开发必备!性能优化系列:启动优化
Android开发必备!性能优化系列:启动优化
Android开发必备!性能优化系列:启动优化
推荐文章
更多