解密Android图形显示系统

作为Android应用的开发,要想确保用户拥有比较顺滑的体验,就一定要从原理上深入理解Android UI的渲染流程。只有真正理解了UI的渲染流程,才能在Android应用的开发过程中尽量避免影响UI性能的设计和实现,并且能够在UI性能的优化上有的放矢。

背景

KitKat引入了Project Butter用于提升图形系统的流畅度。Project Butter对Android图形显示系统进行了重构,引入了Vsync(垂直同步)、Triple Buffer(三重缓存)和Choreographer。

问题

在一个典型的显示系统中,一般包括CPU、GPU和显示控制器这3个部分。CPU用于数据计算,计算结果交给GPU进行渲染,渲染之后的数据被放到buffer中缓存起来,最后由显示控制器将buffer中的数据显示到屏幕上。这个过程存在两个问题。

图形撕裂

在图形绘制速度大于显示速度的情况下,CPU/GPU将当前帧的数据写入buffer后,显示控制器还来不及显示它,CPU/GPU就开始把下一帧的数据写入到buffer中了。当显示控制器开始读取buffer并显示到屏幕上的时候,就会出现屏幕的上半部分是下一帧的情况,这就是所谓的图形撕裂。
在这里插入图片描述

卡顿

图形的绘制速度过慢的时候,同一帧会在屏幕上至少显示2次。
在这里插入图片描述
在第一个16ms内,屏幕显示的是第0帧,CPU/GPU开始处理第1帧。进入第二个16ms,因为在上一个16ms的时间内,第1帧已经由CPU/GPU处理完毕。因此屏幕可以正常显示第1帧。然而,在第二个16ms的时间内,CPU/GPU并未能及时完成第2帧的绘制工作。因此,进入第三个16ms后,屏幕显示的依旧是第1帧的数据,从而产生了一个卡顿。

解决方案

为了解决上述两个问题,Project Butter对Android图形显示系统进行了重构,引入了Vsync(垂直同步)、Triple Buffer(三重缓存)和Choreographer。

Vsync

为解决卡顿的问题,Project Buffer引入了Vsync。显示系统在收到VSync信号之后

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值