Android GUI系统

1.SurfaceFlinger

SurfaceFlinger进程在解析init.rc文件时就被启动了。SufaceFlinger绘制流程实际上是一个生产着消费者模型。客户端Surface持有BpBufferQueueProducer,通过它来向Server端的BufferQueue填充数据。SufaceFlinger作为消费者,把BufferQueue中的数据取出来,进行合成,最终渲染到屏幕上。
在这里插入图片描述

2.WindowServiceManager

WindowServiceManager在SystemServer进程被启动,主要负责管理窗口。App添加窗口时,会调用ViewRootImpl的setView方法,通过mWindowSession进行跨进程通信,最终调用WMS里的addWindow方法添加。
IWindowSession是一个匿名的binderserver,需要借助WMS提供的openSession方法获取的。

3.Surface的创建流程

APP新建Surface壳子,请求WMS填充Surface
WMS请求SurfaceFlinger分配窗口图层
SurfaceFlinger分配Layer,将结果回传给WMS
WMS将窗口信息填充到Surface传输到APP
APP端获得填充信息,获取与SurfaceFlinger通信的能力

在这里插入图片描述

4.双缓冲技术

画面卡顿的原因:绘制和显示不同步导致的。在单缓冲的情况下,这个问题很难规避。双缓冲技术,采用了两块buffer,back buffer用于后台绘制,front buffer用于前台显示。当backbuffer准备就绪后,才能进行交换。而VBI时期出现的Vertical Sync Pulse是最佳的交换时机。在4.1开始,vsync 得到了进一步的优化,系统在收到vsync信号后立即开始下一帧的渲染。但如果一阵渲染时间过长,仍然会导致延迟,进而推出了三缓冲。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值