解决过度绘制的思路总结

过度绘制就是在同一个区域中叠加了多个控件,也就是说一个像素点上会出现多个像素的叠加,实际上呈现在我们眼前的只是最上面的一个,往往造成这种现象的原因是产品或者视觉过多繁琐的建议和交互,或者是开发人员自己不注意造成的。

(一)过度绘制查看:

通过打开开发者选项中的 显示GPU过度绘制(设置—更多设置–开发者选项–调试GPU过渡绘制— 显示过渡绘制区域.)来进行测试(PS:每个手机可能不一样,但是一定是有“调试GPU过渡绘制”选项 ,目前只有android4.2及以上的版本才具备此功能)

一. 颜色标识: 从好到差:蓝-绿-淡红-红

1. 蓝色1x过度绘制
2. 绿色2x过度绘制
3. 淡红色3x过度绘制
4. 红色超过4x过度绘制

二. 验收标准:

1. 控制过度绘制为2x
2. 不允许存在4x过度绘制
3. 不允许存在面积超过屏幕1/4区域的3x过度绘制(淡红色区域)

  处理前:                               处理后:

        


(二)处理方案:

1.减少多余的background,这个最重要,基本上都是因为这个原因造成的。解决好背景基本上就等于解决了大多数。

比如:


2.可复用组建使用include或者style的方式减少大量代码.(这个感觉在优化代码上用的多)

3.viewStub的引入减少不长用的布局View的添加,比较重要,在xml文件预加载的时候他的标识只是说明一个占位符号而已,(这个感觉在代码性能上有所提升)

4,减少层级,可以使用sdk提供的工具Hierarchy Viewer进行层级查看具体使用:

http://blog.csdn.net/kifile/article/details/40822037

5.注意一些层级布局比如:layer-list,

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape>
            <stroke android:color="#cbcbcb"
                android:width="1dp"
                />
            <solid android:color="@color/color1" />
        </shape>
    </item>
    <item android:bottom="1px">
        <shape>
            <solid android:color="@color/color2" />
        </shape>
    </item>
</layer-list>

这种一定要小心,他可能也会引入多一层级,尽量可以用一层完成的就用一层的思路去完成。

6.使用Selector当背景的Layout,会使用Selector来标记点击,选择等不同的状态,可以将normal状态的color设置为”@android:color/transparent”,来解决对应的问题,但是这个前提的使用效果要求你的Iten以下的背景颜色值和你normal的颜色值一样.

7.this.getWindow().setBackgroundDrawable(null);的方式去设置背景,这个要谨慎使用,在低端机上的使用可能会造成闪屏的情况,

窗口背景的优化
视图有背景,每个窗口也是有背景的。每一Activity是一个窗口,每一个Activity都有不同得背景。界面的绘画顺序如下:窗口——跟视图 ——子视图。当我们的跟视图已经覆盖了整个窗口的时候 ,程序还是会画一个透明的窗口的背景,而这个背景用户是看不到的。我们就需要想办法让程序在这样的情况下去掉窗口背景,节约画窗口背景的时间提高效率。
第一种:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 删除窗口背景
    getWindow().setBackgroundDrawable(null);
}

第二种:

首先在res/values/style.xml 文件中定义如下:
<resources>
    <style name="NoBackgroundTheme" parent="android:Theme">
        <item name="android:windowBackground">@null</item>
    </style>
</resources>








猜你喜欢

转载自blog.csdn.net/sheng2459704496/article/details/52044867