通过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的
我们知道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的