《高性能Andorid开发》笔记 -- 屏幕和UI性能

1.UI性能标准

卡顿(丢帧):1s/60fps

2.Android UI和渲染性能改进历史

  • Honeycomb:App可以使用GPU硬件加速
  • Ice Cream Sandwich及其以上默认开启硬件加速
  • JellyBean 4.1及其以上,“黄油计划”

3.创建视图

  • 尽可能保持视图扁平化:重复测量(RelativeLayout和设置weight属性的LinearLayout)。
    工具:
  • Hierarchy Viewer : 研究视图层次,减少视图层的深度。TreeView,点击彩色venn按钮,可以加载每个view 测量、布局、绘制的具体时间. ubuntu和mac版本,均不能导出psd格式的图层(用来研究过度绘制),是hv的bug吗?。

4.资源缩减:

2014年, Instagram将标题栏使用的资源数量从29个减少到了8个。启动时间缩短了10%~20%(因设备而异)。他们通过资源着色缩减资源,也就是加载时仅加载一个资源,然后在运行时通过 ColorFilter 对资源进行着色。

过度绘制:屏幕的重绘

检测:

  • 1.设置开发者选项,打开布局绘制 Debug GPU Overdraw 选项
  • 2.Hierarchy Viewer中的viewhierarchy导出为psd文件,用GIMP文件打开观察各个layer叠加情况。
  • kk版本有过度绘制避免机制—【Overdraw Avoidance】

5 卡顿分析:

Android Marshmallow 在 gfxinfo 库里增加了另一个好用的测试工具:

adb shell dumpsys gfxinfo <packagename> framestats

它能够输出一张表格,该表格可以用逗号分隔每一帧事件的具体耗时。列名没有给出,但在Android开发者网站里有具体的解释。为了算出渲染中每一步的耗时,必须计算出 framestats 值之间的差异。为了简化运算,我创建了一个电子表格用来计算感兴趣的值。当你粘贴上原始的 CSV 数据时,对每一帧的渲染来说,P-X 列的数据都是有用的(所有结果的单位都是毫秒。

6.丢帧:主要介绍systrace工具使用。略。

7.感知性能

  • 小于1s的加载,使用进度条可能使得增长用户的延迟感;
  • 动画掩盖加载时间
  • 网络上数据上延迟,UI上立刻更新(善意谎言