前言
汇总了一下众多大佬的性能优化文章,本期汇总一下安卓性能优化部分的知识点,主要包含:
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