當前位置:編程學習大全網 - 熱門推薦 - 第10章 GUI系統之“窗口管理員”--WMS

第10章 GUI系統之“窗口管理員”--WMS

“窗口”是壹個抽象的概念,從用戶角度來講,它是壹個“界面”;從 SurfaceFlinger 角度來看,它是壹個 Layer,承載著和“界面”有關的數據和屬性;從 WMS 的角度來看,它是壹個 WindowState,用於管理和“界面”有關的狀態。

打個比方,就像壹出由N個演員參與的話劇:SurfaceFlinger 是攝像機,WMS 是導演,ViewRoot 則是演員個體。攝像機(SurfaceFlinger)的作用是單壹而規範的,它負責客觀地捕獲當前的畫面,然後真實地呈現給觀眾;導演(WMS)則會考慮到話劇的舞臺效果和視覺美感,如他需要根據實際情況來安排各個演員的排序站位,誰在前誰在後,都會影響到演出的“畫面效果”與“劇情編排”;而各個演員(ViewRoot)的長相和表情,則更多地取決於他們自身的條件和努力。

從計算機 I/O 系統的角度來分析,WMS 至少要完成以下兩個功能:

應用程序的顯示請求在 SurfaceFlinger 和 WMS 的協助下有序地輸出給物理屏幕或者其他顯示設備。

SurfaceFlinger 只做與“顯示”相關的事情,WMS 還要“兼職”對輸入事件的派發。

窗口類型(Type):

層級(BaseLayer):

通過 windowTypeToLayerLw 函數對不同的窗口類型進行簡單映射,映射規則取決於設備所采用的 WindowManagerPolicy。

Window Policy 即窗口策略,代表了 Android 顯示系統所遵循的統壹的窗口顯示規則。

窗口屬性:

窗口屬性統壹放置在 WindowManager.LayoutParams 中,有如下幾個重要變量:

Surface 申請流程(relayout)

WMS 原則上只負責管理“窗口”的層級和屬性,而 SurfaceFlinger 才是真正將窗口數據合成並最終顯示到屏幕上的系統服務。

Surface 的跨進程傳遞

Surface(Java)對象在兩個地方會被創建:

從函數名大概可以猜出它的設計意圖,即 Perfrom Layout 和 Place Surface。Layout 在這裏側重表達的是“尺寸大小”的意思,即每個窗口所占的空間;後者則與 SurfaceFlinger 有關 -- WMS 是“導演”,它需要將自己的意圖告訴“攝影機”(Surface)。

SYSTEM_UI_FLAG_FULLSCREEN:用戶要求全屏。

SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:“假設”當前已經是全屏。

窗口動畫類型

動畫流程追蹤--WindowStateAnimator

1.獲取對應的動畫id

2.加載動畫

3.設置動畫

AppWindowAnimator

當啟動壹個新的 Activity 時,AMS 會根據當前的實際情況來判斷是否為應用程序設置 AppWindowAnimator 以及動畫的類型。

  • 上一篇:鐘情是什麽意思 詞語鐘情是什麽意思
  • 下一篇:諾基亞刷機失敗成磚,開不開機,也充不進電,怎麽辦啊,連接USB也沒反應,怎麽辦啊?
  • copyright 2024編程學習大全網