Android开发中UI优化方案整理 (UI渲染背景知识,系统做的优化,工程师优化方案,优化工具)

UI 优化究竟指的是什么呢?所谓的 UI 优化,应该包含两个方面:一个是效率的提升,我们可以非常高效地把 UI 的设计图转化成应用界面,并且保证 UI 界面在不同尺寸和分辨率的手机上都是一致的;另一个是性能的提升,在正确实现复杂、炫酷的 UI 设计的同时,需要保证用户有流畅的体验。UI 渲染的背景知识1. 屏幕与适配屏幕的尺寸从 3 英寸到 10 英寸,分辨率从 320 到 1920 应有尽有,除此之外,材质也是屏幕至关重要的一个评判因素。目前智能手机主流的屏幕可分为两大类:一种是
摘要由CSDN通过智能技术生成

目录

UI 优化究竟指的是什么呢?

UI 渲染的背景知识

UI优化主要分为三部分:

系统做的优化

硬件加速

Project Butter

RenderThread

我们可以具体实施的优化方案

java代码布局

View重用

异步创建view

xml布局优化

异步布局框架Litho

屏幕适配

Flutter

Jetpack Compose

工具篇

Choreographer

LayoutInspector/Android Device Monitor

Systrace

参考


UI 优化究竟指的是什么呢?

所谓的 UI 优化,应该包含两个方面:

一个是效率的提升,我们可以非常高效地把 UI 的设计图转化成应用界面,并且保证 UI 界面在不同尺寸和分辨率的手机上都是一致的;

另一个是性能的提升,在正确实现复杂、炫酷的 UI 设计的同时,需要保证用户有流畅的体验。

UI 渲染的背景知识

1. 屏幕与适配

屏幕的尺寸从 3 英寸到 10 英寸,分辨率从 320 到 1920 应有尽有,除此之外,材质也是屏幕至关重要的一个评判因素。目前智能手机主流的屏幕可分为两大类:一种是 LCD(Liquid Crystal Display),即液晶显示器;另一种是 OLED(Organic Light-Emitting Diode 的)即有机发光二极管。

对于屏幕碎片化的问题,Android 推荐使用 dp 作为尺寸单位来适配 UI。

2. CPU 与 GPU

除了屏幕,UI 渲染还依赖两个核心的硬件:CPU 与 GPU。UI 组件在绘制到屏幕之前,都需要经过 Rasterization(栅格化)操作,而栅格化操作又是一个非常耗时的操作。GPU(Graphic Processing Unit )也就是图形处理器,它主要用于处理图形运算,可以帮助我们加快栅格化操作。

可以从图上看到,软件绘制使用的是 Skia 库,它是一款能在低端设备如手机上呈现高质量的 2D 跨平台图形框架,类似 Chrome、Flutter 内部使用的都是 Skia 库。

3. OpenGL 与 Vulkan

对于硬件绘制,我们通过调用 OpenGL ES 接口利用 GPU 完成绘制。OpenGL是一个跨平台的图形 API,它为 2D/3D 图形处理硬件指定了标准软件接口。而 OpenGL ES 是 OpenGL 的子集,专为嵌入式设备设计。

Android 7.0 把 OpenGL ES 升级到最新的 3.2 版本同时,还添加了对Vulkan的支持。Vulkan 是用于高性能 3D 图形的低开销、跨平台 API。相比 OpenGL ES,Vulkan 在改善功耗、多核优化提升绘图调用上有着非常明显的优势。在国内,“王者荣耀”是比较早适配 Vulkan 的游戏,虽然目前兼容性还有一些问题,但是 Vulkan 版本的王者荣耀在流畅性和帧数稳定性都有大幅度提升,即使是战况最激烈的团战阶段,也能够稳定保持在 55~60 帧。

UI优化主要分为三部分:

第一部分,系统为我们做的优化。

由于前端中UI展示的特殊性和重要性,Android团队也是在不断想办法提高UI方面的渲染速度,所以也是更新了很多系统优化方案,比如:硬件加速、黄油计划、RenderThread。

第二部分,我们可以具体实施的优化方案。

主要包括:java代码布局、View重用、异步创建View、xml布局优化、异步布局框架Litho、屏幕适配、Flutter、Jetpack Compose。

第三部分,工具使用。

主要包括:Choreographer、monitor、Systrace

系统做的优化

硬件加速

上面介绍过,一个图形的绘制是CPU,GPU和屏幕三方合作的结果。在Android3.0之前,还没有硬件加速,都是通过CPU进行数据计算,然后通过Skia库进行软件绘制,但是CPU对于图形处理并不高效。

于是从3.0开始,Android支持了硬件加速,到Android4.0默认开启硬件加速。开启硬件加速后,就是由CPU进行图形缓存数据的绘制。这样CPU和GPU就能比较好的分工,各司其职了。CPU用于控制复杂绘制逻辑、构建或更新DisplayList(基础元素);GPU用于完成图形计算、渲染DisplayList(基础元素)。

这里也找了一张各种场景下,硬件加速前后的流程与加速效果(Android6.0背景):

但是硬件加速也是有缺点的:

  • 启用硬件加速需要更多资源,因此应用会占用更多内存。
  • 比较低的版本,由于有些Canvas API还没有支持,所以使用硬件加速可能会有问题。那么我们就可以手动关闭某个view的硬件加速:
    myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)

Project Butter

黄油计划,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值