Android性能优化之Systrace分析UI性能

当你是一位程序员其实很有必要对写完的代码负责任,是否你会怀疑自己写的代码已经是完美了。我常常很奇怪的怀疑自己写的代码这里不行那里可能有问题,当这些疑问都出来的时候怎么让自己安心呢?那就是让自己的代码经过这些性能分析工具的分析,只有通过它们的检测才能给自己下一个定心丸,所以开始学习性能分析。

Systrace前言

Systrace允许你跟踪系统的行踪(trace),它可以告诉你在哪些线程、进程在这段时间内都做了什么,都把时间花在哪里,然后通过系统的提示优化点从而找到那些不足的代码来进行优化。

Systrace启动

Systrace可以通过命令行启动也可以通过图形界面启动,首先要确保你运行的设备的SDK的API版本>=16,然后设备定位到需要调试的界面输入命令或者打开图形界面采集trace。
命令输入:

$ cd android-sdk/platform-tools/systrace
$ python systrace.py --time=10 -o mynewtrace.html sched gfx view wm

图形界面启动:

Android性能优化之Systrace分析UI性能_第1张图片

Systrace界面预览

通过上面的步骤之后就会在规定的目录下生成一份html文件然后打开后就可以看到了如下的界面。

Android性能优化之Systrace分析UI性能_第2张图片

可以通过键盘来放大、缩小、移动。
w:用于变大
s:用于缩小
d:左边移动
a:右边移动
你也可以点击右上角的?号来查看等多的操作

Systrace性能调优

我们主要查看界面上的Alert、Frames,其中可以用绿色、黄色、红色来区分当前界面的性能等级分别是优、良、差。当遇到红色的时候肯定当前的性能需要优化。

Android性能优化之Systrace分析UI性能_第3张图片

我们主要查看图片中的红色框内的优化点。
当我们点击了Alerts或者点击右边的Alerts列表中的任何一点我们可以看到在界面的最底部会相对应的优化提示以及可能会出现优化的视频教程链接。

Android性能优化之Systrace分析UI性能_第4张图片

比如上面的提示说你View的draw绘制花的时间太长了,然后我们可以根据Description来很明白的看到提示的内容是什么。

然后我们可以点击一块Frames中的F来查看,同样的它会生成一份跟Alerts类似的报告结果并放在界面的最低端。我们可以通过按下m键查看这一帧到下一帧所花费的时间以及哪个方法被调用的最长。

Android性能优化之Systrace分析UI性能_第5张图片

可以明显看到这时间>16.6ms,系统要求UI的60fps水准所以系统会报出黄色的警告。照样我们从Description中可以读出到底是哪里出了问题

Description 
ListView item recycling involved inflating views. Ensure your Adapter#getView() recycles the incoming View, instead of constructing a new one.

我们可以看出来系统提示你在getView中花费了太多时间没能很有效的复用机制。我们就能顺着这条路去找界面的代码哪里出现了不足从而优化完善。

当然Systrace无法帮你定位到代码里面的具体到某一行代码,但是我们可以通过Alerts和Frames来能基本上优化了不足的地方,然后我们可以根据TraceView来分析具体函数花了多长时间来进一步优化代码提高性能。

你可能感兴趣的:(Android学习笔记)