所有需要顯示在屏幕上的內容都要通過windowManager
windowManager 是一個接口 三個方法 add remove update
他的具體實現類是windowManagerImpl類(橋接模式) 具體的實現是交給了windowManagerGlobal處理
WindowManagerGlobal Addview的過程 (每個window 都有對應的 VIEW VR )
檢查參數是否合法創建ViewRootImpl 并將 view添加到列表中 在其中有幾個列表 ArrayList mviews window 對應view ArrayList mRoots window 對應的 VR ArrayList mDyingview 被刪除的view對象 ArrayList<> mParams window 對應的參數布局通過viewRootImpl 的SetView方法完成 SetView通過requestLayout 完成異步請求 接著通過windowsession 完成最終的window添加過程 mWindowSession 是IwindowSession一個Binder對象 實現類是session (ipC調用) Session內部通過WMS來實現window 的添加 wms會為每一個應用保留一個session 由此進入到framework層Activity 中window 的創建過程 1. Activty 所屬的window 對象是同過PolicyManager的makenewWindow方法實現的 2. 策略類 真正的實現類是policy 而policy中makeNewWindow方法返回的是phoneWindow 由此可見window的具體實現是phoneWindow 至此Activity 的window已經創建完成 那么Activity 的視圖是如何附屬在window 上的呢? 1.看setContentView 方法 2.轉移至Phonewindow 的setContentView 方法上 1.創建DecorView 頂級布局 2.將view 添加至mContentParent 上 3.回調Activity的onContentChanged 方法通知視圖已經改變。
新聞熱點
疑難解答