大家都知道CPU(中央处理器)主要负责数学和逻辑运算,在很早前,CPU还负责图像的显示操作,但是这样会大大的降低CPU的运算性能,所以GPU应运而生,GPU主要负责图像的渲染与显示,至此,CPU只需要给GPU发出指令,GPU再将我们写好的页面栅格化渲染显示出来,以一个button为例!
大概来说就是CPU将UI对象计算成成多维图形(多边形、纹理),再通过OPENGL进行处理,处理完之后再交给GPU进行栅格化渲染并交给显示器进行显示。
而一个 Android 应用是否流畅,或者说是否存在卡顿、丢帧现象,都与 60fps 和 16ms 有关。那么这两个值是怎么来的呢?为什么以这两个值为衡量标准呢?
这就要说到渲染性能方面决定 Android 应用流畅性的因素了。
一般的电影拍摄及播放帧率均为每秒 24 帧,但是据称《霍比特人:意外旅程》是第一部以每秒 48 帧拍摄及播放的电影,观众认为其逼真度得到了显著的提示。
目前,大多数显示器根据其设定按 30Hz、 60Hz、 120Hz 或者 144Hz 的频率进行刷新。而其中最常见的刷新频率是 60Hz。
由于人眼的特殊构造,对于60fps以下的帧率画面,会给人一种卡顿的现象,所以就出现了16ms原则(1000ms/60fps = 16ms),即要保证页面16ms刷新一次。
Android系统每隔16ms发出vsync信号,触发对UI进行渲染,1s内大约刷新屏幕60次,显示60帧的数据。
fps:画面每秒钟传输的帧率,帧率越高,画面越流程,反之越卡顿
而我们再回到日常开发,或者面试时是否会遇到以下问题?
vsync如何协调应用和SurfaceFlinger配合来完成UI渲染、显示,App接收vsync后要做哪些工作?
requestLayout和invalidate区别?
performTraversals到底是干什么了?
surfaceflinger怎么分发vsync信号的?
app需要主动请求vsync信号,sw sync才会分发给app?
surfaceview显示视频的时候,视频会一直频繁刷新界面,为什么整个UI界面没有卡顿?
app是如何构建起上面这套机制的?
就以上7个面试题,是经常面试时会被问到的。而我们如何从它的基础挖起把渲染机制吃透呢?我们可以找一个Android渲染整体架构图来拆开看;如下图所示:
想必大部分,对流程图中的知识划分熟悉又陌生。大家都很了解,但是学透的往往是属于少数人的。 渲染机制是Android操作系统很重要的一环 ,所以这一环节在Android开发中也是很关键的点。
如果你还没有掌握这套主流技术,现在想要在最短的时间里吃透它,那么必须要跟着真正有实力的大佬一起学习!
这里我特别从华为高级开发拿到他整理出的《深度解析Android性能优化之渲染机制》系列知识文档,让你站在高级工程师的角度,深度理解Android的渲染机制,明确surfaceflinger,Choreographer在渲染体系中的职能以及对于卡顿和日常图像渲染的影响。能帮助开发者在项目中突破性能瓶颈与业务瓶颈,并直接应用在公司项目中。
我们从渲染出发学习,然后通过渲染来深入性能优化;点击获取资料方式。部分展示如下
性能优化是Android开发之路上。必不可少的。大厂是基本需求,面试是必问的知识点。