Android4.0.1 Activity的DecorView与SurfaceFlinger的Surface之间关系的建立过程分析

本文分析了Android4.0.1中Activity的DecorView与SurfaceFlinger的Surface建立关系的过程,从WindowManagerService的mWindowMap结构到ViewRootImpl的setView方法,再到IWindow、WindowSession和WindowState的一一对应。通过WindowManagerService的addWindow和WindowState的attach函数,建立了系统服务与客户端Session的关联。接着,描述了ViewRootImpl的mSurface与SurfaceFlinger创建的Surface的关联过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过Android4.0.1 Activity的Window与DecorView关系建立过程分析
我们知道DecorView与ViewRootImpl之间是一一对应的关系。ViewRootImpl的成员变量mView保存DecorView的实例。
DecorView是整个Activity的View Tree的根视图,整个Activity的显示就是从DecorView开始将整颗ViewTree中的可视部分绘制到SurfaceFlinger提供的Surface上。
ViewRootImpl中包含一个Surface类型的成员变量mSurface。
在ViewRootImpl的draw()函数中可以看到,Activity的view tree绘制从DecorView开始触发,绘制在了ViewRootImpl的mSurface lock得到的一块Cavas上。
所以Activity的DecorView是与ViewRootImpl的mSurface直接关联的。
所以本文的重点就是分析ViewRootImpl的mSurface成员变量是怎样与SurfaceFlinger的Surface建立关联的。
具体的分析过程可分为两步。
第一步,我们先弄清楚ViewRootImpl中的IWindowSession,IWindow类型的成员变量和WindowManagerService中维护的WindowState类型的成员变量之间的关系。
这里先给出结论:
ViewRootImpl与WindowManagerService之间要进行双向通信。
ViewRootImpl通过IWindowSession与WindowManagerService通信。
WindowManagerService通过IWindow与ViewRootImpl通信。
IWindowSession的具体实现类Session在WindowManagerService中的实例代表一个需要与WindowManagerService通信的客
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值