android的視窗機制分析------UI管理系統
Activity可以看做是整個android系統的人機介面,它提供了一個視窗來繪製UI,每個Activity在啟動時,我們都需要給它設定一個Content view,作為Activity所呈現的UI內容,這個過程是通過setContentView()方法來實現的。
眾所周知,android系統中強化了view的概念,主要是體現在對view的管理上,Android中的view以2種形態存在,單一的View和多個View組成的ViewGroup。Content view是以ViewGroup的形式存在的,也就是說在一個Activity視窗中可以新增多個View,這樣就實現了Android視窗系統的UI多樣化。activity啟動時給activity視窗設定的Content view 是從xml檔案中解析出來的,那麼android是怎麼樣對這個ContentView進行管理的呢,它的內部實現邏輯又是怎樣的呢?
在進行分析之前,首先給出一個Activity的window和view系統的層級關係,這個層級關係就是在Activity設定完ContentView之後的狀況。
如下圖。
下面來一一介紹各個層級的含義與作用
1.1 PhoneWindow
PhoneWindow是Android中的最基本的視窗系統,每個Activity 均會建立一個PhoneWindow物件,是Activity和整個View系統互動的介面。
1.2 DecorView
DecorView是當前Activity所有View的祖先,它並不會向使用者呈現任何東西,它主要有如下幾個功能,可能不全:
A. Dispatch ViewRoot分發來的key、touch、trackball等外部事件;
B. DecorView有一個直接的子View,我們稱之為System Layout,這個View是從系統的Layout.xml中解析出的,它包含當前UI的風格,如是否帶title、是否帶process bar等。可以稱這些屬性為Window decorations。
C. 作為PhoneWindow與ViewRoot之間的橋樑,ViewRoot通過DecorView設定視窗屬性。
1.3 System Layout
目前android根據使用者需求預設了幾種UI 風格,通過PhoneWindow通過解析預置的layout.xml來獲得包含有不同Window decorations的layout,我們稱之為System Layout,我們將這個System Layout新增到DecorView中,目前android提供了8種System Layout,如下圖。
預設風格可以通過PhoneWindow方法requestFeature()來設定,需要注意的是這個方法需要在setContentView()方法呼叫之前呼叫。
1.4 Content Parent
Content Parent這個ViewGroup物件才是真真正正的ContentView的parent,我們的ContentView終於找到了寄主,它其實對應的是System Layout中的id為”content”的一個FrameLayout。這個FrameLayout物件包括的才是我們的Activity的layout(每個System Layout都會有這麼一個id為”content”的一個FrameLayout)。
1.5 Activity Layout
這個ActivityLayout便是我們需要向視窗設定的ContentView,現在我們發現其實它的地位很低,同時這一部分才是和user互動的UI部分,其上的幾層並不能響應並完成user輸入所期望達到的目的。
相關文章
- android的視窗機制分析------ViewRoot類AndroidView
- android的視窗機制分析------事件處理Android事件
- Android視窗管理分析(2):WindowManagerService視窗管理之Window新增流程Android
- Android 8.0 原始碼分析 (十) WindowManagerService 的視窗管理Android原始碼
- Android視窗管理分析(3):視窗分組及Z-order的確定Android
- Chrome OS 有了全新的視窗管理機制,向現代化的圖形作業系統Chrome作業系統
- android視窗管理剖析Android
- 圖解Android - Android GUI 系統 (2) - 視窗管理 (View, Canvas, Window Manager)圖解AndroidGUIViewCanvas
- ncurses視窗機制:wprintw(), wrefresh()
- Android系統安全機制Android
- Flink的視窗處理機制(一)
- ios,android和javascript的UI事件機制iOSAndroidJavaScriptUI事件
- Android包管理機制Android
- Android 之 Window、WindowManager 與視窗管理Android
- Android IPC 機制分析Android
- Android10_原理機制系列_Activity視窗新增到WMS過程Android
- Android視窗管理分析(4):Android View繪製記憶體的分配、傳遞、使用AndroidView記憶體
- Qt 視窗強制禁用系統陰影(自定義選單)QT
- ncurses視窗機制:newwin(),wprintw(),delwin(),box(),wborder(),
- Android系統之Binder通訊機制Android
- 使用半透明系統UI擴充套件Android檢視UI套件Android
- ABAP Webdynpro和WebClient UI不同的會話管理機制WebclientUI會話
- android的TouchEvent派發機制的分析Android
- Android 作業系統的記憶體回收機制Android作業系統記憶體
- Android 系統 overlay 機制重點小結Android
- Android視窗管理分析(1):View如何繪製到螢幕上的主觀理解AndroidView
- Android顯示框架:Android應用視窗的管理者WindowManagerAndroid框架
- Android 的 Handler 機制實現原理分析Android
- Android視窗系統第四篇—Activity動畫的設定過程Android動畫
- Android視窗系統第四篇---Activity動畫的設定過程Android動畫
- 基於Android 4.4 開發的多視窗系統 開放原始碼Android原始碼
- Android 系統原始碼-2:Binder 通訊機制Android原始碼
- 計算機系統的安全機制計算機
- Go 包管理機制深入分析Go
- win10系統怎麼調出顏色管理_win10系統開啟顏色管理視窗的方法Win10
- Linux系統呼叫詳解(實現機制分析)Linux
- Android應用視窗突破手機侷限性Android
- iOS10 UI教程基礎視窗的內容與設定起始視窗iOSUI