最近在解过度绘制的问题单时,对过度绘制和渲染进行了简要的学习。
UI 优化究竟指的是什么呢?应该包含两个方面:一个是效率的提升,我们可以非常高效地把 UI 的设计图转化成应用界面,在不同并且保证 UI 界面尺寸和分辨率的手机上都是一致的;另一个是性能的提升,在正确实现复杂、炫酷的 UI 设计的同时,需要保证用户有流畅的体验。
那什么是 UI 渲染呢?Android 的图形渲染框架十分复杂,不同版本的差异也比较大。但是无论怎么样,它们都是为了将我们代码中的 View 或者元素显示到屏幕中。而屏幕作为直接面对用户的手机硬件,类似厚度、色彩、功耗等都是厂家非常关注的。
如果你粉刷过一个房间或一所房子,就会知道给墙壁涂上颜色需要做大量的工作。假如你还要重新粉刷一次的话,第二次粉刷的颜色会覆盖住第一次的颜色,第一次的颜色就永远不可见了,等于你第一次粉刷做的大量工作就完全被浪费掉。
同样的道理,如果在你的应用程序中浪费精力去绘制一些东西同样会产生性能问题。过度绘制这个名词就是用来描述屏幕上一个像素在单个帧中被重绘了多少次。
GPU过度绘制就指的是在屏幕一个像素上绘制多次(超过一次),GPU过度绘制或多或少对性能有些影响。
过度绘制实际上是性能与设计的交叉。设计中追求的是绚丽的视觉效果,但一般而言,这种视觉效果将使用大量的层叠组件来实现,此时会带来过多的绘制问题。让我们看一下 Android界面层次关系的具体表现:
在绘制界面的时候,会有一个窗口,接下来就是建立活动,在这个活动中可以创建多个视图,或者视图组,并且视图可以嵌套视图。每个组件都是从上到下分布的,用户可以看到上面的组件,而下面的组件则看不到,但是仍然需要花费大量的时间来绘制这些不可见的组件,因为在某个时候,它也可能出现。
调试GPU过度绘制主要通过在屏幕上显示不同的颜色来分析,它的开关在设置的开发者选项中,如下图所示:设置-开发者选项-调试GPU过度绘制-显示过度绘制区域(过度渲染等,不同机器可能不同)。
可以看到不同地方的颜色不同,这个颜色是什么意思呢,下面给大家做一个解释:
GPU过渡渲染不同的颜色代表不同的绘制程度,一般情况下颜色越深表示渲染的程度越重,颜色接近于原来的颜色那么它的渲染的话应该是非常少的。如果是原色,表示没有过度的绘制。如果蓝色的话表示只绘制了一次,这个是理想状态,绿色的话表示绘制两次,浅红为三次表示可以优化。如果是深红的话,表示绘制了四次就需要必须优化了。一般情况下,我们要控制绘制在两次以内,不允许存在四次这样的过渡绘制。
渲染流程中 measure 和 layout 是需要 CPU 在主线程执行的,对于这块内容网上有很多优化的文章,一般的常规方法有:
这个优化工作对我来说是一个很有价值的经验,在解决这个问题单的时候,采用的解决方案是优化背景,去除重复设置的背景,但过度绘制其实还有很多其他的常用优化手段。比如:使用硬件加速、Create View优化(使用代码创建)(异步创建)(View重用)等,需要进一步深入学习。
1.太多重叠的背景
2.太多重叠的view
3.复杂的Layout层级
最终目的都是使得Layout在Hierarchy Viewer里变得宽而浅,而不是窄而深。
检查 GPU 渲染速度和过度绘制_知识空间-CSDN博客Android 包含一些设备上的开发者选项,可帮助您直观地查看您的应用可能会在何处遇到界面渲染问题,如执行不必要的渲染工作,或执行长时间的线程和 GPU 操作。本页介绍如何调试 GPU 过度绘制问题以及如何分析 GPU 渲染问题。如需详细了解设备上的开发者选项,包括如何启用它们,请阅读配置设备上的开发者选项。分析 GPU 渲染速度GPU 渲染模式分析工具以滚动直方图的形式直观地显示渲染界面窗口帧所花费的时间(以每帧 16 毫秒的速度作为对比基准)。在性能较低的 GPU 上,可用的填充率(GPU 填充
本文发布于:2024-02-01 06:50:35,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170674143734678.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |