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去检测一下!!!

相关文章
|
2月前
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
52 10
|
2月前
|
缓存 监控 Android开发
探索iOS与安卓开发中的性能优化策略
在移动应用开发的竞技场上,iOS和安卓这两大操作系统不断推动着技术的边界。性能优化,作为提升用户体验的关键因素,已成为开发者们关注的焦点。本文将深入探讨两大平台上的性能优化实践,揭示如何通过工具、技术和策略来提升应用的响应速度和流畅度,同时考虑到电池寿命和内存管理等关键指标。
|
3月前
|
存储 Java 编译器
🔍深入Android底层,揭秘JVM与ART的奥秘,性能优化新视角!🔬
【7月更文挑战第28天】在Android开发中,掌握底层机制至关重要。从Dalvik到ART, Android通过采用AOT编译在应用安装时预编译字节码至机器码,显著提升了执行效率。ART还优化了垃圾回收,减少内存占用及停顿。为了优化性能,可减少DEX文件数量、优化代码结构利用内联等技术、合理管理内存避免泄漏,并使用ART提供的调试工具。
94 7
|
4月前
|
传感器 安全 Android开发
探索iOS与安卓应用开发的性能差异
在移动操作系统领域,iOS和安卓的较量从未停歇。本文将深入探讨两大平台在应用开发中的性能表现,揭示它们各自的优势与局限。通过对比分析,我们将理解开发者如何在这两个不同的生态系统中做出权衡,以及这些选择如何影响最终用户的体验。
27 0
|
14天前
|
Android开发 开发者 索引
Android实战经验之如何使用DiffUtil提升RecyclerView的刷新性能
本文介绍如何使用 `DiffUtil` 实现 `RecyclerView` 数据集的高效更新,避免不必要的全局刷新,尤其适用于处理大量数据场景。通过定义 `DiffUtil.Callback`、计算差异并应用到适配器,可以显著提升性能。同时,文章还列举了常见错误及原因,帮助开发者避免陷阱。
34 9
|
23天前
|
存储 Java 编译器
🔍深入Android底层,揭秘JVM与ART的奥秘,性能优化新视角!🔬
【9月更文挑战第12天】在Android开发领域,深入了解其底层机制对提升应用性能至关重要。本文详述了从早期Dalvik虚拟机到现今Android Runtime(ART)的演变过程,揭示了ART通过预编译技术实现更快启动速度和更高执行效率的奥秘。文中还介绍了ART的编译器与运行时环境,并提出了减少DEX文件数量、优化代码结构及合理管理内存等多种性能优化策略。通过掌握这些知识,开发者可以从全新的角度提升应用性能。
41 11
|
23天前
|
安全 Android开发 数据安全/隐私保护
安卓与iOS的对决:移动操作系统的性能与创新
在当今智能手机市场,安卓和iOS两大操作系统一直处于竞争状态。本文将深入探讨它们在性能、安全性和用户体验方面的不同,并分析这些差异如何影响用户的选择。
41 3
|
2月前
|
人工智能 缓存 数据库
安卓应用开发中的性能优化技巧AI在医疗诊断中的应用
【8月更文挑战第29天】在安卓开发的广阔天地里,性能优化是提升用户体验、确保应用流畅运行的关键所在。本文将深入浅出地探讨如何通过代码优化、资源管理和异步处理等技术手段,有效提升安卓应用的性能表现。无论你是初学者还是资深开发者,这些实用的技巧都将为你的安卓开发之路增添光彩。
|
2月前
|
API Android开发
Android P 性能优化:创建APP进程白名单,杀死白名单之外的进程
本文介绍了在Android P系统中通过创建应用进程白名单并杀死白名单之外的进程来优化性能的方法,包括设置权限、获取运行中的APP列表、配置白名单以及在应用启动时杀死非白名单进程的代码实现。
47 1
|
21天前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
43 0
下一篇
无影云桌面