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

相关文章
|
12月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1128 4
|
算法 数据处理 Android开发
掌握安卓性能优化的秘诀:电池寿命与运行效率的提升
【10月更文挑战第6天】 本文深入探讨了安卓应用开发中的性能优化技巧,重点分析了影响电池寿命和运行效率的关键因素,并提供了针对性的优化策略。通过代码优化、资源管理、后台任务处理等方法,开发者可以显著提升应用的续航能力和流畅度。同时,结合具体案例,展示了如何在实际开发中应用这些技巧,确保应用在各种场景下都能保持高效运行。本文旨在为安卓开发者提供实用的性能优化指导,助力其打造更优质的应用体验。
334 2
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
182 10
|
缓存 监控 Android开发
探索iOS与安卓开发中的性能优化策略
在移动应用开发的竞技场上,iOS和安卓这两大操作系统不断推动着技术的边界。性能优化,作为提升用户体验的关键因素,已成为开发者们关注的焦点。本文将深入探讨两大平台上的性能优化实践,揭示如何通过工具、技术和策略来提升应用的响应速度和流畅度,同时考虑到电池寿命和内存管理等关键指标。
|
算法 JavaScript Android开发
|
11月前
|
网络协议 Linux Android开发
深入探索Android系统架构与性能优化
本文旨在为读者提供一个全面的视角,以理解Android系统的架构及其关键组件。我们将探讨Android的发展历程、核心特性以及如何通过有效的策略来提升应用的性能和用户体验。本文不包含常规的技术细节,而是聚焦于系统架构层面的深入分析,以及针对开发者的实际优化建议。
314 21
|
12月前
|
Android开发 开发者
Android性能优化——内存管理的艺术
Android性能优化——内存管理的艺术
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
189 5
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
288 3

热门文章

最新文章