Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android View Window Activity WindowManager ViewRoot

Android View Window Activity WindowManager ViewRoot

編輯:關於Android編程

1)View:最基本的UI組件,表示屏幕上的一個矩形區域。 2)Window:表示一個窗口,不一定有屏幕那麼大,可以很大也可以很小;它包含一個View tree和窗口的layout參數。Viewtree的root View可以通過getDecorView得到。還可以設置Window的ContentView。 3)Activity:Activity包含一個Window,該Window在Activity的attach方法中通過調PolicyManager.makeNewWindo創建 4)WindowManager:一個interface,繼承自ViewManager。有一個implementation  5)class:android.view.WindowManagerImpl   其實WindowManager並不是整個系統的窗口管理器,而是所在應用進程的窗口管理器。系統全局的窗口管理器運行在SystemServer進程中,是一個Service。      ViewRoot通過IWindowSession接口與全局窗口管理器進行交互。將一個Viewadd到WindowManager時,WindowManagerImpl創建一個ViewRoot來管理該窗口的根View。並通過ViewRoot.setView方法把該View傳給ViewRoot。       ViewRoot用於管理窗口的根View,並和globalwindow manger進行交互。ViewRoot中有一個nested class:W,W是一個Binder子類,用於接收global window manager的各種消息, 如按鍵消息, 觸摸消息等。ViewRoot有一個W類型的成員mWindow,ViewRoot在Constructor中創建一個W的instance並賦值給mWindow。ViewRoot是Handler的子類, W會通過Looper把消息傳遞給ViewRoot。ViewRoot在setView方法中把mWindow傳給sWindowSession。   ActivityThread.java中調用wm.addView(decor,l);把它加入到window manager proxy的mViews中,同時為這個decorview創建一個ViewRoot,ViewRoot負責協調decorview與window manager直接繪圖、事件處理。   ViewRoot中有IWindowSession和IWindow用來和windowmanger打交道和接收window manager傳過來的消息,消息傳過來後ViewRoot分發給decorview,再由decor view進行分發   總之,每個窗口對應著一個Window對象,一個根View和一個ViewRoot對象。要想創建一個窗口,可以調用 WindowManager的addView方法,作為參數的view將作為在該窗口上顯示的根view    一般來講,Activity就是一個可視的人機交互界面。 每一個Activity都有一個默認的Window,一般來講,這個Window都是全屏的,當然也有例外,比如Dialog的Window就是非全屏的。Activity也可以利用默認Window以外的其它的Window,比如彈出一個Dialog對話框。 Window裡可見的內容,就是一層一層的View。Window裡的View是通過setContentView這個接口set進去的,這個ContentView就是Window裡處於最根部的View。   對於屏幕顯示而言,整個是Activity其實確切的說是window,為什麼這樣說呢? 在Activityattach 函數裡.有這樣一句mWindow = PolicyManager.makeNewWindow(this); 這句是把Activiytwindow關聯起來了.真正關聯的是PhoneWindow.   這個window裡顯示的東西是view(activity是邏輯上的東西,增加了生命周期管理等.裡面具體的東西也是view。而且啟動activity的實現也是往window裡加view),往window裡加view,是通過調用WindowManager(WindowManagerImpl).addView()來實現的。   為什麼可以這樣說呢? 看public voidsetCo
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved