

系統(tǒng)啟動(dòng)的時(shí)候在systemserver中去創(chuàng)建wms,wms中回去創(chuàng)建所有屏幕管理容器RootWindowContainer,在rwc中回去創(chuàng)建對(duì)應(yīng)的DisplayContent,
DisplayContent代表了一個(gè)屏幕的虛擬管理類,每個(gè)Dc都會(huì)創(chuàng)建對(duì)應(yīng)的DisplayPloicy對(duì)象,DP首先會(huì)去初始化Window的層級(jí)結(jié)構(gòu)樹,window總共
分為0~36層,每一層都會(huì)掛載到對(duì)應(yīng)的層級(jí)結(jié)構(gòu)樹上,比如0層就是壁紙window,1層是TaskDisplayArea主要掛載activity的窗口,一次往上會(huì)有
navigationbar和statusbar的掛載層,一次Window就形成了一個(gè)Z-Order順序;
ViewRootImpl WMS
1.
setView();
Session.addTODisplayAsUser() --> addWindow();
1.校驗(yàn)type類型以及是否具有權(quán)限;
2.為窗口創(chuàng)建對(duì)應(yīng)的WindowToken,并把Token根據(jù)type類型把token添加到窗口層級(jí)樹上
activity的窗口被掛到TaskDisplayArea容器中;
3.創(chuàng)建WindowState,并把WindowState添加進(jìn)Token中去;
4.通過對(duì)應(yīng)的DisplayPloicy.addWindow() 過濾window類型是statusbar/navigationbar 等創(chuàng)建
對(duì)應(yīng)的Insets插圖,為后續(xù)activty顯示區(qū)域做計(jì)算使用;
5.更新焦點(diǎn)window;
2.
relayout();
Session.relayout(); --> relayoutWindow();
1.WindowSurfacePlacer.performSurfacePlacer();會(huì)去RWC中遍歷所有dc
2.dc中遍歷所有window,以樹形結(jié)構(gòu)從上到下遍歷;
3.到dp中通過WindowLayout來計(jì)算所有的插圖insets資源的尺寸確定添加window的顯示區(qū)域;