订阅移动开发RSS CSDN首页> 移动开发

腾讯Bugly干货分享:Android应用性能评测调优

发表于2015-06-17 09:15| 次阅读| 来源CSDN| 0 条评论| 作者叶方正

摘要:Android App各项性能如CPU、内存消耗等都是开发测试中需要关注的指标,如何将App打造的更加“优雅”是开发者们需要不断追求探索的方向,本文作者从内存和流畅度两个纬度来说说如何对Android App进行评测和调优。
二、流畅度

对于App是否流畅这个维度,之前一直没有一个客观的数据来将用户客观感受和数据一一对应起来。虽然之前有FPS(每秒帧数)这个指标来衡量,不过这对于App这样的大部分时候可能没有界面更新的软件来说,是一个不恰当的客观数据(当然FPS用于游戏或视频类业务肯定是没问题的)。在和我们的浏览器团队沟通后,应他们的需求(它不仅要做最快的浏览器,同时也要做最流畅的浏览器),MIG(专项测试组)多位同学一起来通过研究Android自身UI更新机制以及通过数学建模摸索出一个客观数据指标流畅度(SM: SMoothness)来量化流畅度这个客观感受。

首先从下面开始…

1. Android如何绘制UI

关于Android是如何去更新UI的,我相信有很多文章来介绍其中步骤以及过程,大体上可以用下图来展示:


从图中可以看到,无论哪条路走下去始终都由SurfaceFlinger来控制最后更新。在Android版本更新过程中发现在Jelly Bean版本更新中,Google加入一个Project Butter来解决严重影响Android口碑问题之一的UI流畅性差的问题。而Project Butter中引入了三个核心元素,即VSync(垂直同步)、Triple Buffer和Choreographer。

2. 先VSync开始

在Android 4.1(Jelly Bean)中引入了VSync机制,是Vertical Synchronization(垂直同步)的缩写,是一种在PC上已经很早就广泛使用的技术,可以简单地把它认为是一种定时中断。(编者注:此处参考邓凡平《Android Project Butter分析》一文)


如上图所示在VSync机制下的绘制过程。从上面的图看CPU和GPU处理时间都很快都少于一个VSync的间隔也就是16ms,并且每个间隔都有绘制的情况下那么当前的FPS即是60帧。当CPU和GPU处理时间都很慢或者因为其他的原因,比如在主线程中干活太多那么就会出现如下图这样的状况。


从上图可以看到CPU和GPU处理时间因为各种原因比较慢都大于一个VSync的间隔(16ms),那么可以看到在第二个VSync还在处理A区域的绘制这样就不可能实现理论上的FPS 60了同时也出现了丢帧(SF: Skipped Frame)。上图为了便于理解用的是双Buffer机制的情况,实际上Android 4.1在引入了Triple Buffer,所以当双Buffer不够用时Triple Buffer丢帧的情况如下图所示。


Oh my ladygaga~~~这些把洒家看晕了…那打个比方讲得通俗点。

VSync机制就像是一台转速固定的发动机(60转/s)。它每一转带动着去做一些UI相关的事情,但是不是每一转都会有工作去做(就像有时在空挡,有时在D档)。有时候因为各种阻力某一圈工作量比较重超过了16.6ms,那么这台发动机这秒内就不是60转了,当然也有可能被其他因素影响比如给油不足(主线程里干的活太多)等等。就会出现转速降低的状况我们把这个转速叫做流畅度。

  • CSDN官方微信
  • 扫描二维码,向CSDN吐槽
  • 微信号:CSDNnews
程序员移动端订阅下载

微博关注

相关热门文章