window层级结果树


系统启动的时候在systemserver中去创建wms,wms中回去创建所有屏幕管理容器RootWindowContainer,在rwc中回去创建对应的DisplayContent,

DisplayContent代表了一个屏幕的虚拟管理类,每个Dc都会创建对应的DisplayPloicy对象,DP首先会去初始化Window的层级结构树,window总共

分为0~36层,每一层都会挂载到对应的层级结构树上,比如0层就是壁纸window,1层是TaskDisplayArea主要挂载activity的窗口,一次往上会有

navigationbar和statusbar的挂载层,一次Window就形成了一个Z-Order顺序;

ViewRootImpl WMS

1.

setView();

Session.addTODisplayAsUser() --> addWindow();

1.校验type类型以及是否具有权限;

2.为窗口创建对应的WindowToken,并把Token根据type类型把token添加到窗口层级树上

activity的窗口被挂到TaskDisplayArea容器中;

3.创建WindowState,并把WindowState添加进Token中去;

4.通过对应的DisplayPloicy.addWindow() 过滤window类型是statusbar/navigationbar 等创建

对应的Insets插图,为后续activty显示区域做计算使用;

5.更新焦点window;

2.

relayout();

Session.relayout(); --> relayoutWindow();

1.WindowSurfacePlacer.performSurfacePlacer();会去RWC中遍历所有dc

2.dc中遍历所有window,以树形结构从上到下遍历;

3.到dp中通过WindowLayout来计算所有的插图insets资源的尺寸确定添加window的显示区域;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容