过度绘制(Overdraw)是指在一帧的时间内像素被绘制了多次;
理论上一个像素每次只绘制一次是最优的,但是由于层叠的布局导致一些像素会被多次绘制,而每次绘制都会对应到CPU的一组绘图命令和GPU的一些操作,所以对重叠不可见元素的重复绘制会产生额外的计算,需要尽量减少Overdraw的发生。
Android系统提供了测量Overdraw的选项,在开发者选项-调试GPU过度绘制(Show GPU Overdraw),打开选项就可以看到当前页面Overdraw的状态。
根据overdraw的次数会显示不同的颜色来区分
总的原则就是:尽量避免重叠不可见元素的绘制
去除不需要的背景资源
android:windowbackground="null"
;分段设置背景
有时候为了方便会先给Layout设置一个整体的背景,再给子View设置背景,这里也会造成重叠,如果子View宽度mach_parent,可以看到完全覆盖了Layout的一部分,这里就可以通过分别设置背景来减少重绘。
View onDraw()方法
自定义View绘制时避免重叠部分的绘制,可以使用
canvas.clipRect(); // 裁剪canvas
canvas.quickReject(); // 判断矩形区域是否相交
Android Performance Patterns: Understanding Overdraw
Android Performance Patterns: Invalidations, Layouts, and Performance
Android性能优化系列——Understanding Overdraw
原文地址:http://blog.csdn.net/xu_fu/article/details/45030107