Android过度绘制解决方案

过度绘制的危害以及产生的原因,可以参考网络资料。

优化过度绘制,是为了保证APP的流畅度,而APP卡顿不全部是因为布局问题导致的, 布局问题会导致渲染时间延长 从而造成卡顿。

所以当有掉帧的时候,不一定是布局的问题

PS:调试APP过度绘制,先打开开发者选项中的:GPU呈现模式分析和调试GPU过度绘制的开关。

打开之后看这个页面的过度绘制情况。

1. 页面布局上面颜色表示的含义:

    a.原色 – 无过度绘制
    b.蓝色 – 1次过度绘制
    c.绿色 – 2次过度绘制
    d.粉色 – 3次过度绘制
    e.红色 – 4次过度绘制

优化原则: 大部分区域为蓝色和绿色,不允许出现深红色(4层以上),允许出现少量(1/4屏幕)的浅红色(3层),在文字和图标区域,允许一些3x、4x绘制。

2. 下面柱状图展示的颜色值 表示的含义:

柱状图每一根代表一帧,其高度表示“渲染这一帧耗时” 。6.0之后的系统都使用8种颜色表示 每一帧里面各个阶段的耗时情况

3. 可以看出来 当绘制、测量布局、动画、输入处理、其他时间延迟比较高的时候 需要我们来处理。

测量、布局耗时是我们需要优化的过度绘制的主要原因。

 

清理过度绘制的5板斧

  1. 去掉多余背景。包括window的背景、Activity的大背景、父View的背景。

    如果一个页面的或者一个Fragment的整个区域都有重绘,那么就需要找它的背景或者它的window的背景。

  2. 合理使用控件。

    尽量少用嵌套布局; 如果使用RelativeLayout 可以减少布局层级,就尽量使用RelativeLayout; 如果过于复杂就是用 include进行分化;可以尝试使用约束布局ConstraintLayout ;

  3. 少用带有 alpha 颜色值,如果可以通过改变色值来实现的效果,尽量不要通过 透明度来进行设置。

  4. 灵活使用.9图片。如果碰到加父View有边框,尽量使用.9图边,因为Android 2D渲染器只对draw9patch的透明区域进行优化,不会造成多一次的绘制。

  5. 使用include、merge、viewStub优化布局节点。

猜你喜欢

转载自blog.csdn.net/sduliulun/article/details/84783800