【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )(一)

简介: 【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )(一)

一、 过度绘制


过渡绘制 :



① 过渡绘制 : GPU 绘制图像时 , 会从底层到上层逐层绘制 , 底层的图像会被上层覆盖 , 底层图像无法显示给用户观看 , 但还是会占用绘制时间 , 这样就造成了时间上的浪费 , 甚至导致整个渲染过程超过 16 ms ;



② 过渡绘制的示例 : 打个比方 , 给墙刷大白 , 先刷一遍绿色的 , 再刷一遍蓝色的 , 最后再刷白色的 , 很明显先刷的两遍是无用的 , 但是耗费了很多时间 , GPU 的过渡绘制也是这个原理 , 底层绘制了很多重叠覆盖的图像 , 花费了时间最终并不展示给用户观看 ;






二、 过度绘制两种情况 ( 自定义控件 | 布局文件 )


Android 中 GPU 过度绘制情况 : 自定义控件 , 布局文件 ;



① 自定义组件 : 在自定义 View 组件中 , 实现的的 onDraw 方法使用 Canvas 绘制了很多重叠的元素 ; 如绘制 Bitmap 后 , 又在该 Bitmap 上又绘制了一个矩形 , 这样矩形覆盖了 Bitmap , 这两个图像都要被 GPU 渲染 , 这样就增加了渲染时间 ;



② 布局层次深 : 在普通的布局文件中 , 布局嵌套很多 ; 如外层的 RelativeLayout , 内层嵌套了 LinearLayout , 在线性布局中又嵌套了 FrameLayout , 布局嵌套会导致很多组件的重叠 ; 对于每个组件 , CPU 都会将该组件对象转为向量图 , 传递给 GPU 渲染 , 重叠图像过多 , 显然会使 GPU 过渡绘制 ;



设置透明背景 , 或者设置组件 Gone , 就不会绘制该组件






三、 过度绘制调试




1. 打开过渡绘制调试工具


开发者选项中 , 有 “调试 GPU 过渡重绘” 选项 , 打开该选项 , 选择 “显示过渡绘制区域” , 即可查看过渡绘制情况 ;

image.png




选择 第二项 , “显示过渡绘制区域” , 即可查看过渡绘制情况 ;


image.png




2. 过渡绘制调试中不同颜色的含义


组件上各个颜色代表的含义 : 打开过渡绘制调试工具后 , 组件上有不同的颜色 ;



① 蓝色 : GPU 过度绘制了 1 11 次 , 没有过渡绘制 ;


② 浅绿色 : GPU 过度绘制了 2 22 次 ;


③ 浅红色 : GPU 过度绘制了 3 33 次 ;


④ 深红色 : GPU 过度绘制了 4 44 次及 4 44 次以上 ;

image.png


image.png




一般情况下蓝色 , 和浅绿色是可以接受的 , 红色 , 深红的区域绝对不能大范围出现 ;




3. 过渡渲染示例


这是 Android 的设置界面 , 大部分是蓝色 , 或浅绿 , 浅红色只占很小的部分 ;

image.png

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
3月前
|
缓存 搜索推荐 Android开发
安卓开发中的自定义控件实践
【10月更文挑战第4天】在安卓开发的海洋中,自定义控件是那片璀璨的星辰。它不仅让应用界面设计变得丰富多彩,还提升了用户体验。本文将带你探索自定义控件的核心概念、实现过程以及优化技巧,让你的应用在众多竞争者中脱颖而出。
|
3月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
1月前
|
搜索推荐 Android开发 开发者
安卓应用开发中的自定义控件实践
在安卓应用开发的广阔天地中,自定义控件如同璀璨的星辰,点亮了用户界面设计的夜空。它们不仅丰富了交互体验,更赋予了应用独特的个性。本文将带你领略自定义控件的魅力,从基础概念到实际应用,一步步揭示其背后的原理与技术细节。我们将通过一个简单的例子——打造一个具有独特动画效果的按钮,来展现自定义控件的强大功能和灵活性。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往更高阶UI设计的大门。
|
3月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
77 4
|
3月前
|
缓存 搜索推荐 Android开发
安卓开发中的自定义控件基础与进阶
【10月更文挑战第5天】在Android应用开发中,自定义控件是提升用户体验和界面个性化的重要手段。本文将通过浅显易懂的语言和实例,引导你了解自定义控件的基本概念、创建流程以及高级应用技巧,帮助你在开发过程中更好地掌握自定义控件的使用和优化。
65 10
|
2月前
|
前端开发 Android开发 UED
安卓应用开发中的自定义控件实践
【10月更文挑战第35天】在移动应用开发中,自定义控件是提升用户体验、增强界面表现力的重要手段。本文将通过一个安卓自定义控件的创建过程,展示如何从零开始构建一个具有交互功能的自定义视图。我们将探索关键概念和步骤,包括继承View类、处理测量与布局、绘制以及事件处理。最终,我们将实现一个简单的圆形进度条,并分析其性能优化。
|
2月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统的差异性及优化策略
在当今数字化时代,移动操作系统的竞争尤为激烈,其中iOS和Android作为市场上的两大巨头,各自拥有庞大的用户基础和独特的技术特点。本文旨在通过对比分析iOS与Android的核心差异,探讨各自的优势与局限,并提出针对性的优化策略,以期为用户提供更优质的使用体验和为开发者提供有价值的参考。
|
3月前
|
前端开发 搜索推荐 Android开发
安卓开发中的自定义控件实践
【10月更文挑战第4天】在安卓开发的世界里,自定义控件如同画家的画笔,能够绘制出独一无二的界面。通过掌握自定义控件的绘制技巧,开发者可以突破系统提供的界面元素限制,创造出既符合品牌形象又提供卓越用户体验的应用。本文将引导你了解自定义控件的核心概念,并通过一个简单的例子展示如何实现一个基本的自定义控件,让你的安卓应用在视觉和交互上与众不同。
|
3月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
198 0