Android基础-秒懂SurfaceView的双缓冲机制
最近在重温Android的一些基础知识,看到SurfaceView的原理中有用到 双缓冲机制 ,那么接下来我将带领大家学习什么是双缓冲模式。
什么是双缓冲模式?
双缓冲模式 常用来做帧缓冲区交换。我们几乎可以在任何一个图形API中找到双缓冲模式的应用。如OpenGl中的 swapBuffers() 函数,Android中SurfaceView双缓冲机制。
那么SurfaceView中的双缓冲机制是什么样子呢?
看下图:
可以看出来SurfaceView的双缓冲机制还是稍有不同,前/后台缓冲区交替成为后/前台缓冲区。同时需要注意每次在绘制的时候都需要清除Canvas画布,不然会出现画面叠加的现象。
那么这样有什么好处呢?
我来给你说一下计算机cpu具体处理数据的一个大致的流程,或许你能理解点什么吧:
数据的处理是由CPU执行的,内存的容量都很有限,所以不可能长期存放大量的数据,因此采用缓冲这一机制来解决这个问题。CPU处理数据的速度很快,所以只有直接去内存去数据才能和CPU的处理速度匹配(CPU从内存取数据速度快,用时短),但是内存不可能随时都存放着CPU下一秒钟可能会用到的数据,因为内存的容量太小。因此,在CPU和内存之外引入了缓冲的概念,缓冲顾名思义就是用在数据交换的时候起一个缓冲的作用,也就是在内存和外设之间的另一条通道,这样就可以实现CPU和内存之间交换数据的同时,内存可以和外设之间进行数据的交换,把CPU需要处理的数据先从外设读取到内存,再从内存读取到CPU,这样就可以解决各种设备的容量和速度匹配之间的问题。当然,严格来说,在CPU和内存之间还有一种叫做寄存器的设备,这种设备容量很小,但是读取速度比内存要快,所以通常都是把CPU用到的数据放到寄存器里面,CPU直接到寄存器读取数据的。也就是说CPU可以去寄存器读取数据,也可以去内存读取数据(先去寄存器读取数据,如果寄存器里面没有需要的数据,就去内存读取,要是内存还没有需要的数据,那就从外设读到内存,再从内存到CPU),希望这样的描述可以帮到你对这些概念的理解。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!