Android性能优化之工具介绍

1、概述

在Android应用开发过程中,该如何发现性能问题呢?除了用户在使用APP的过程中发现卡顿,有什么方法可以监控卡顿吗?本篇文章主要介绍一些Android为我们已经提供的工具,如何去使用这些工具,通过这些工具帮助我们分析卡顿原因,最终解决卡顿等问题。

2、工具介绍

Android为我们提供了很多非常优秀的工具来帮我们检查应用性能问题,例如查看layout层次的Hierarchy View、检查过度绘制或渲染的工具 Profile GPU Rendering和静态代码检查工具Lint、Android Studio 自带的 TraceView及Systrace 等。

2.1 Profile GPU Rendering的使用

什么是Profile GPU Rendering?

它是一个图形监测工具,能反应界面是否过度绘制;

打开Profile GPU Rendering,低版本的系统会绘制滚动的柱状图来显示绘制每一帧所消耗的时间,高版本的系统只会显示UI的绘制复杂度。

如何打开Profile GPU Rendering?

手机/模拟器-->开发者选项-->GPU 呈现模式(Profile GPU Rendering),具体如下图:

图2

从上图可以看到一条横着的绿线和很多条形柱,每一条柱状图都由 4 种颜色组成:红、黄、蓝、紫,这些线对应每一帧在不同阶段的实际耗时。

绿色横线

绿线代表16ms,要确保一秒内打到60fps,你需要确保这些帧的每一条线都在绿色的16ms标记线之下.任何时候你看到一个竖线超过了绿色的标记现,你就会看到你的动画有卡顿现象产生。

蓝色

蓝色代表测量绘制的时间,也可以理解为执行每一个 View的 onDraw 方法执行的时间,如果蓝色的线很高时,有可能是因为需要重新绘制,或者自定义视图的onDraw函数处理事情太多。

红色

红色代表执行的时间,这部分是 Android 进行 2D 渲染 Display List 的时间。为了绘制到 屏幕上,Android 需要使用 OpenGl ES 的 API 接口来绘制 Display List,这些 API 有效地将数据 发送到 GPU,最终在屏幕上显示出来。当红色的线非常高时,可能是由重新提交了视图而导致的,例如改变View的大小、位置、颜色等。

橙色

橙色部分表示处理时间,或者是 CPU 告诉 GPU 渲染一帧的地方,这是一个阻塞调用, 因为 CPU 会一直等待 GPU 发出接到命令的回复,如果柱状图很高,就意味着 GPU 太繁忙了。

紫色

紫色段表示将资源转移到渲染线程的时间,只有 Android 4.0 及以上版本才会提供。

任何时候柱状图超过绿线(警戒线,对应时长 16ms),就有可能丢失一帧的内容,虽然对于大 部分应用来说,丢失几帧确实感觉不出卡顿,但保持 UI 流畅的关键就在于让这些垂直的柱 状条尽可能地保持在绿线下面,通常我们只需要关注蓝色、红色和绿线就好。

除了如上方式可以通过柱状图来查看View是否过度绘制,其实Android系统还为我们提供另一种方式来查看View是否过度绘制,具体步骤如下:

手机/模拟器-->开发者选项-->调试GPU过度绘制,

图1

它一共分为四个等级,蓝色,淡绿,淡红,深红代表了4种不同程度的Overdraw情况,我们要尽量减少淡红,深红的模块。

总结

GPU Profile Render 工具能够很好地帮助你找到渲染相关的问题,但是要修复这些问题就不是那 么简单了。需要结合另一个耗时工具和代码来具体分析,找到性能的瓶颈,并进行优化。在 GPU Profile Render 发现有问题的页面后,可以通过另外一个工具 Hierarchy Viewer 来查看页面的布局层次和每个 View 所花的时间。

2.2 Hierarchy View的使用

Hierarchy Viewer Android SDK 自带的一款可视化调试工具,用来检查 Layout 嵌套及绘制时间,以可视化的布局角度直观获取 Layout 布局设计和各种属性信息,开发者在调试和布局 UI 界面时可以很方便地使用,提高用户的开发效率。

比较遗憾的是,在高版本的Android studio,已经去掉了Hierarchy Viewer ,取而代之的是Layout Inspector,Layout Inspector只能查看到布局层次,没法看到View的绘制时间(meausre、layout、draw的时间)。

 

打开Hierarchy Viewer步骤: 

选择Tools->Android->Android Device Monitor 菜单,直接打开 Hierarchy View(Android studio 2.0左右才有)

打开Layout Inspector步骤:

选择Tools->Layout Inspector (Android studio3.0)

 
下面分别给两个图来展示对应的界面,给予一个直观的理解。
 

2.3 Systrace的使用

Systrace Android 4.1 及以上版本提供的性能数据采样和分析工具。它可以帮助开发者收集 Android 关键子系统(如 surfaceflingerWindowManagerService Framework 部分关键模块、服务,View 系统等)的运行信息,从而帮助开发者更直观地分析系统瓶颈,改进性能。

 

由于 Systrace 是以系统的角度返回一些信息,并不能定位到具体耗时的方法,要进一步获取 CPU 满负荷运行的原因,就需要使用前面介绍过的工具 Traceview。具体详情可以参考  性能优化工具(二)-Systrace

2.4 TraceView的使用

TraceView Android SDK 自带的工具,用来分析函数调用过程,可以对 Android 的应用程序以及 Framework 层的代码进行性能分析。它是一个图形化的工具,最终会产生一个图表,用于对性能分析进行说明,可以分析到应用具体每一个方法的执行时间,使用可以非常直观简单,分析性能问题很方便。

具体详情可以参考    性能优化工具(三)-TraceView
 

2.5 Android Profiler

在Android studio 3.0之后,Google将Android Monitor 工具废弃了,取而代之的是Android Profiler。Android Profiler 工具可提供实时数据,帮助您了解应用的 CPU、内存、网络和电池资源使用情况。

具体详情可以查看 利用 Android Profiler 测量应用性能

 

参考文档

《Android应用性能优化最佳实践》

性能优化工具(二)-Systrace

Android性能优化—TraceView的使用

UI优化之-GPU Rendering Profile

发布了74 篇原创文章 · 获赞 17 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/u010349644/article/details/102991870
今日推荐