美文网首页IT@互联网
Android性能优化-GPU过度绘制及优化

Android性能优化-GPU过度绘制及优化

作者: Smile_188 | 来源:发表于2018-12-12 16:20 被阅读0次

    过度绘制

            过度绘制就是在绘制界面时,对同一个像素重复绘制了多次,但是用户能够看到的也只有最顶层绘制的内容,GPU过度绘制或多或少对性能有些影响。

    检测过度绘制

    如何查看是否过度绘制:

    设置-开发者选项-调试GPU过度绘制-显示过度绘制区域(过度渲染等,不同机器可能不同)

    然后就可以看看你的应用是否存在过度绘制的情况了。

    那么如何判断界面是否存在过度绘制呢?

    开启后,点击我们的应用,可以看到各种颜色的区域,其中:

    最理想的是蓝色,一个像素只绘制一次,合格的页面绘制是白色、蓝色为主,绿色以上区域不能超过整个的三分之一,颜色越浅越好。

    项目实践

    用工具对我项目测试了下,大部分页面都存在过渡绘制的情况;列举两个

    UI界面粉红色居多,大部分都是绿色,我希望达到的目标去除粉红色,可以有绿色,大部分是蓝色。最后是这样 

    优化原则

    一些过度绘制是无法避免的,比如之前说的文字和背景导致的过度绘制,这种是无法避免的。

    应用界面中,应该尽可能地将过度绘制控制为 2 次(绿色)及其以下,原色和蓝色是最理想的。

    粉色和红色应该尽可能避免,在实际项目中避免不了时,应该尽可能减少粉色和红色区域。

    不允许存在面积超过屏幕 1/4 区域的 3 次(淡红色区域)及其以上过度绘制。

    优化方法

    1.移除默认的 Window 背景

    一般应用默认继承的主题都会有一个默认的 windowBackground ,比如默认的 Light 主题

    或者在代码中设置 getWidow.setBackgroundDrawable(null);

    2.移除不必要的背景

    移除XML布局文件中非必需的Background

    3.减少布局嵌套的层级

    尽量减少视图的深度,来减少视图树的遍历过程

    使用ConstraintLayout代替LinearLayout

    4.ViewStub(延迟化加载)

    主要的应用场景就比如说新闻App,打开某个界面,如果有网络就展示内容,没有网络就会提示出网络连接出错,这个出错提示就是ViewStub,在正确的条件下才会显示出内容。

    5.include(引入布局)

    当不同的界面有相同的UI元素的时候我们可以使用include标签,不过引入的布局还可能会被嵌套在LinearLayout,RelativeLayout里面。所以引入merge标签。

    6.merge

    在引入布局文件里面,最外层可以用merge替代LinearLayout,RelativeLayout,这样把子UI元素直接衔接在include位置。

    相关文章

      网友评论

        本文标题:Android性能优化-GPU过度绘制及优化

        本文链接:https://www.haomeiwen.com/subject/jrfphqtx.html