Android性能优化系列篇(一):UI优化

本文介绍了Android UI优化,包括系统级别的硬件加速、黄油计划和RenderThread,以及开发者可以采取的优化方案,如java代码布局、View重用、异步创建View、XML布局优化、Litho和Jetpack Compose等。还提到了UI优化工具,如Choreographer、LayoutInspector和Systrace。
摘要由CSDN通过智能技术生成

前言

汇总了一下众多大佬的性能优化文章,本期汇总一下安卓性能优化部分的知识点,主要包含:

UI优化/启动优化/崩溃优化/卡顿优化/安全性优化/弱网优化/APP深度优化等等等~

本篇是第一篇:UI优化! [非商业用途,如有侵权,请告知我,我会删除]

一、UI优化

UI优化知识点主要分为三部分

  • 第一部分,系统为我们做的优化。由于前端中UI展示的特殊性和重要性,Android团队也是在不断想办法提高UI方面的渲染速度,所以也是更新了很多系统优化方案,比如:

硬件加速、黄油计划、RenderThread。

  • 第二部分,我们可以具体实施的优化方案。主要包括:

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

  • 第三部分,工具使用,主要包括:

Choreographer、monitor、Systrace

1.1 系统做的优化

1.1.1 硬件加速

之前我们说过,一个图形的绘制是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

黄油计划,你有可能没怎么听说,但是其实之前两章内容都提到过,Android4.1之后,Google提出了黄油计划,主要包括两个内容:

  • VSYNC

  • Triple Buffering(三重缓存)

这些都熟悉了吧,上两节都说过的,这里再简单提一下:

  • VSYNC

垂直同步信号,每当收到这个信号后,CPU就开始准备Buffer数据,并在16ms之内和GPU把屏幕需要的缓存数据准备好。

  • Triple Buffering(三重缓存)

Android4.1之前,是双缓存机制,大部分是没问题的。但是当CPU/GPU绘制过程较长,超过一个vsync信号周期,一般是16ms,就会导致丢帧,CPU无法使用被GPU或者屏幕占用的缓存区。如果下一帧绘制如果又超时,那么又会丢帧。

所以再加上一个缓存区,这样,CP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值