window层级结果树

2023-07-05  本文已影响0人  WangRain1

系统启动的时候在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的显示区域;

上一篇下一篇

猜你喜欢

热点阅读