联系
我们
投稿
反馈
评论 返回
顶部

内容字号: 默认 大号超大号

段落设置: 段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

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

2017-09-21 11:46 出处:互联网 人气: 评论(
site::huangye51.com c2p工业生态集群 m727突击步枪 mail.230.cn 淘便宜www.koumen.net mmhouse最新地址 mmr-298 mxgs-222 myjollysailorbold mymanagerlitesetup
4. 数数:如何得到流畅度(SM: SMoothness)

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

  • 可以在Choreographer的回调FrameCallback中按秒计数表示当前App的流畅程度。
  • 采用这样方式就可以在App内部观测当前App的流畅度。当然,还有更简单的方法,采用GT工具获取流畅度,见下面步骤说明。

    2) 如果没有以上事件的时候同样也会运行这样一个Loop;
    5. 所以通过如上原理分析可以得出结论:
  • 根据了解文档发现Android 4.1引入了VSync机制可以通过其Loop来了解当前App最高绘制能力。
  • 1) 固定每隔16.6ms执行一次(这个值是一个静态变量会根据系统版本不同而采不同的值,目前测试版本是16.6ms这样最高的刷新的帧率就控制在60FPS以内);

  • 丢帧(SF: Skipped Frame):如上图所示情况应该在16ms完成工作却因各种原因没做完,占了下n个16ms的时间,相当于丢了n帧。
  • 流畅度(SM: SMoothness):和丢帧相对,在VSync机制中1s内Loop运行的次数。
  • 1)和丢帧相对1s内有60个Loop因为某几次工作时间超过了16ms(丢帧),这样Loop就无法运行60次(理论最大值)。

    2)当流畅度越小的时候说明当前程序越卡顿。

    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卡顿的程度:

    3) 所以这个Loop在1s之内运行了多少次,即可以表示当前App绘制的最高的能力,也就是Android App卡顿的程度…

    Choreographer的定义和结构:

    4) 另,在一次Loop时如果执行时间超过了16.6ms,那么多于16.6ms的时间除以16.6ms,即是当前App的丢帧(SF: Skipped Frame)。

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

    分享给小伙伴们:
    本文标签:

    更多文章

    相关文章

  • 蛮便宜
  • 抠门网
  • Copyright © 2002-2014 版权所有