3-1 帧率与流畅度
心理感知
- app需要运行更快一些/感觉有点慢
比较笼统,表达了以上意,但是不明确;终端用户的期望到底是什么,有没有量化的数值?
- 心理学研究:
不同延时长度下人的心理认知
- 0 ~ 100 ms 瞬间发生的 instantaneous
- 100 ~ 300 ms 缓慢的 sluggish
- 300 ~1000 ms 设备还在工作 the machine is working
- 1000+ ms 想要切换场景/离开 a context switch
- 页面加载速度
1秒法则
在一秒钟之内在视觉上赢得用户
3-4秒
用户失去耐心/流失
Jank
- Jank
Android team经常提到jerky, unsmooth motion, jank, laggy,表达的意思都是页面/动画不流畅
- 60FPS
绝大多数Andorid设备的屏幕是60Hz,一秒刷60次(也有个别列外,比如50或者更少)
1s/60 fps = 16ms
保持每一帧在16ms之内完成
跳帧导致用户感觉不流畅
- Android对UI渲染的优化
- Gingerbread及更早的设备,全部靠软件绘制屏幕,没有GPU要求;但是设备尺寸和像素密度在不断增长,直线加剧了渲染压力
- Honeycomb引入tablet,增加GPU芯片,可选择性启用硬件加速来渲染
- Ice Cream Sadwich, 硬件加速默认开启,大幅提高渲染速度
- Jelly Bean "Project Butter"黄油项目,进一步提升性能减少jank。优化VSYNC时间,增加frame buffering是的掉帧减少。提供以协议工具
- 降低屏幕绘制的时延
- 快速创建,一致的帧率
Android系统在不断优化,流畅性越来越好
流畅度
现在我们基本了解了帧率和用户感知到的流畅度是相关的。现在我反问一句:
- 为什么电影24帧,我们就觉得很流畅?
- 帧率低于60FPS是不是一定感觉卡?
心理预期,人眼对输入速度的变化感知明显,电影的每一帧的内容和时间是均匀的,给人的预期是恒定的,所以24帧已经足够让人感觉流畅。 但是app的每一帧消耗时间不同,导致预期是不一致的。 时间渲染需求,比如一个静止的页面没有额外的业务渲染需求,那么他的帧率很低,但并不能说明不流畅。
帧率的=帧数/时间差
流畅度=单位时间回调次数