Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android窗口機制分析與UI管理系統,androidui

Android窗口機制分析與UI管理系統,androidui

編輯:關於android開發

Android窗口機制分析與UI管理系統,androidui


類圖關系

  在看Android的窗口機制之前,先看看其主要的類圖關系以及層級之間的依賴與調用關系  

  

 

  1.window在當前的android系統的中的呈現形式是PhoneWindow

  (frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java);

  2.WindowManager的實現實體是WindowManagerImpl.java

  (frameworks/base/core/java/android/view/WindowManagerImpl.java);

 


層級關系

  下圖主要描述了window系統的層級關系,由圖可見WindowManager是運行在Application process中,WindowManagerService是在system_server中運行,兩者的通信是通過中間的會話層IWindowSession來進行的。

  

 


ViewRoot類

  ViewRoot是GUI管理系統與GUI呈現系統之間的橋梁,根據ViewRoot的定義,我們發現它並不是一個View類型,是一個Handler

  主要作用如下:

  在完成Activity的ContentView設置之後,下面的工作就是准備顯示了,准備顯示的主要工作就是建立起Application和WindowManagerService之間的聯系,第一步的工作就是向WindowManager添加前面涉及到的DecorView,這個DecorView包含了整個Activity的GUI,所以我們只需要把這個DecorView交給WindowManager打理就可以了。

 


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之後的狀況。

   

  各個層級的含義與作用

PhoneWindow

  PhoneWindow是Android中的最基本的窗口系統,每個Activity 均會創建一個PhoneWindow對象,是Activity和整個View系統交互的接口。

DecorView

  DecorView是當前Activity所有View的祖先,它並不會向用戶呈現任何東西。

  它主要有如下幾個功能,可能不全:

 System Layout

  目前android根據用戶需求預設了幾種UI 風格,通過PhoneWindow通過解析預置的layout.xml來獲得包含有不同Window decorations的layout,我們稱之為System Layout,我們將這個System Layout添加到DecorView中,目前android提供了8種System Layout。

    預設風格可以通過PhoneWindow方法requestFeature()來設置,需要注意的是這個方法需要在setContentView()方法調用之前調用。

  

Content Parent

  Content Parent這個ViewGroup對象才是真正的ContentView的parent,ContentView終於找到了寄主,它其實對應的是System Layout中的id為”content”的一個FrameLayout。這個FrameLayout對象包括的才是Activity的layout(每個System Layout都會有這麼一個id為”content”的一個FrameLayout)。

Activity Layout

  這個ActivityLayout便是我們需要向窗口設置的ContentView,現在我們發現其實它的地位很低,同時這一部分才是和user交互的UI部分,其上的幾層並不能響應並完成user輸入所期望達到的目的。

 

轉自:http://www.cnblogs.com/lcw/p/3372914.html

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved