当前位置: 首页>移动开发>正文

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

过度绘制

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

检测过度绘制

如何查看是否过度绘制:

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

Android性能优化-GPU过度绘制及优化,第1张

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

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

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

Android性能优化-GPU过度绘制及优化,第2张

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

项目实践

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

Android性能优化-GPU过度绘制及优化,第3张

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

Android性能优化-GPU过度绘制及优化,第4张

优化原则

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

应用界面中,应该尽可能地将过度绘制控制为 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位置。


https://www.xamrdz.com/mobile/4cb1848576.html

相关文章: