標籤:
一、Activity、Window、 View 之間關係
Android 圖形化使用者介面(Graphical User Interface,簡稱GUI),遵循GWES(圖形視窗事件系統)的一般規律,系統管理使用者輸入(事件管理)和系統螢幕輸出(視窗與介面繪製)的一個系統。
在Android開發中如果要顯示一個介面,都會先寫一個Activtiy子類,所以都理解為Activity就是一個介面,這種說法比較寬泛。由系統負責建立開發編寫的Activity子類,Activity建立是建立一個Window對象(通常是PhoneWindow),Window建立時會添加一個View對象(DecorView)。所以三者的關係是Activity -> Window -> View ,以下簡單描述三者主要職責(詳見官方3個類相關文檔):
Activity : 應用展示一個介面的老大,並不負責螢幕展示,主要用於與Android系統進行互動。Window : 負責顯示布局(多個視窗是上下層級顯示、還是上下左右平級顯示)、顯示層級、事件處理。View : 負責控制如何繪製具體View地區 與 View地區內的事件處理。
二、Window系統
Android的視窗管理是Client/Server(C/S)模式的。
ClientActivity 開啟一個會話(開啟IWindowSession AIDL介面),通過此介面將Window加入到WindowManager
Server將視窗子添加到WindowManager
WindowManagerServiceAndroid 設計時需要考慮的視窗問題:
視窗z-order序的管理(視窗如何疊加)
使用中視窗的計算,及其變化通知
視窗歸屬(屬於哪個應用)
IME管理
三、Window類型與層級
WindowManagerService -> IWindow <- ViewRoot (View 變數、token 用於IPC通訊)
視窗類別型,int值越大越靠上顯示
| 視窗類別型 |
建立方式 |
取值範圍 |
| 應用視窗 |
Activity內部完成建立 |
1 ~ 99 |
| 子視窗 |
由父視窗建立 |
1000 ~ 1999 |
| 系統視窗 |
系統判斷僅顯示一層 |
2000 ~ 2999 |
參考資料:Android 核心分析(12) -----Android GEWS視窗管理之基本架構原理
Android 核心分析(13) -----Android GWES之Android視窗管理
《Android 核心剖析》 柯元旦第8章 建立視窗的過程第14章 WindowManagerService工作原理
Android Window簡單學習整理 一