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

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

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

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

3. 从FPS&丢帧到流畅度(SM: SMoothness)

实际上在我们很多的Android App中,很少有需要不断地去绘制的场景,很多时候都是静态的。也就是会出现这样的状况,虽然1s中VSync的60个Loop中不是每个都在做绘制的工作FPS比较低,但并不能代表这个时候程序不流畅(如我将App放在那不动实测FPS为1)。所以FPS为1这个数并不能代表当前App在UI上界面不流畅,因此1s内VSync这个Loop运行了多少次更加能说明当前App的流畅程度。So…另2个指标比FPS更加能代表当前的App是否处于流畅的状态同样这2个指标更加能够量化App卡顿的程度:

  • 丢帧(SF: Skipped Frame):如上图所示情况应该在16ms完成工作却因各种原因没做完,占了下n个16ms的时间,相当于丢了n帧。
  • 流畅度(SM: SMoothness):和丢帧相对,在VSync机制中1s内Loop运行的次数。

1)和丢帧相对1s内有60个Loop因为某几次工作时间超过了16ms(丢帧),这样Loop就无法运行60次(理论最大值)。
2)当流畅度越小的时候说明当前程序越卡顿。

4. 数数:如何得到流畅度(SM: SMoothness)

接着上面的结论如果在这样的机制下每次Loop运行之前通知我下,我就记个数就好了。

很幸运我们在新的Android的那一套机制中找到了一个画图的打杂工Choreographer这个对象。根据Google的官方API文档描述他是用来协调animations、input以及drawing时序的,并且每个Looper共用一个Choreographer对象。

Choreographer的定义和结构:


5. 所以通过如上原理分析可以得出结论:

  • 根据了解文档发现Android 4.1引入了VSync机制可以通过其Loop来了解当前App最高绘制能力。

1) 固定每隔16.6ms执行一次(这个值是一个静态变量会根据系统版本不同而采不同的值,目前测试版本是16.6ms这样最高的刷新的帧率就控制在60FPS以内);
2) 如果没有以上事件的时候同样也会运行这样一个Loop;
3) 所以这个Loop在1s之内运行了多少次,即可以表示当前App绘制的最高的能力,也就是Android App卡顿的程度…
4) 另,在一次Loop时如果执行时间超过了16.6ms,那么多于16.6ms的时间除以16.6ms,即是当前App的丢帧(SF: Skipped Frame)。

  • 可以在Choreographer的回调FrameCallback中按秒计数表示当前App的流畅程度。

采用这样方式就可以在App内部观测当前App的流畅度。当然,还有更简单的方法,采用GT工具获取流畅度,见下面步骤说明。

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

微博关注

相关热门文章