google 公开课 https://www.udacity.com/course/ud825
Render Performance 主要讲的是关于绘制性能的优化
界面卡顿的根源
android系统采用60帧每秒的刷新频率,因此帧间隔是16ms。我们所有的计算过程都要在16ms中完成,如若不然,就会导致丢帧,只要有丢帧,就会导致界面卡顿。
android View的简单的绘制过程
上图中,比较慢的过程分别是
- 生成display list
- 将绘制信息传送到GPU
优化
android系统已经对我们的绘制过程进行了大量的优化,对于开发者而言,我们主要关注下面两点
-
overdraw (GPU端)
overdraw主要会带来无效的绘制,拖慢速度- overdraw的Debug工具
android系统已经为我们提供了检查overdraw的工具,在设置->开发者选项 中即可开启。开启后,界面上将会出现4种颜色,其中,蓝色表示 overdraw 一次,绿色两次,浅红三次,深红四次,如果现实的是原来的颜色,表示没有overdraw - 如何减少overdraw
减少overdraw主要要注意以下几点- 不要设置无用的背景。
例如:将window的背景设置为null
getWindow().setBackgroudDrawable(null);
还有,移除layout中非必要的背景 - 对于自己绘制的custom view,使用cliprect方法来指定绘制区域,避免 canvas做无效绘制
- 不要设置无用的背景。
- overdraw的Debug工具
layout (CPU端)
layout生成display list也是耗时的工作,每次layout大小,位置等信息的改变也会导致display list的重新生成,为了加快display list的生成速度,我们要尽可能的保证layout的简单平坦
使用Hierarchy view找出layout中较慢的点。详情请参考文章开发的视频