iew:最基本的UI組件,表示屏幕上的一個矩形區域。android
Window: 表示一個窗口,包含一個View tree和窗口的layout 參數。View tree的root View能夠經過getDecorView獲得。還能夠設置Window的Content View。
Activity包含一個Window,該Window在Activity的attach方法中經過調用PolicyManager.makeNewWindow建立。
WindowManager:一個interface,繼承自ViewManager。 有一個implementation class:android.view.WindowManagerImpl。其實WindowManager並非整個系統的窗口管理器,而是所在應用進程的窗口管理器。系統全局的窗口管理器運行在SystemServer進程中,是一個Service。ViewRoot經過IWindowSession接口與全局窗口管理器進行交互。 將一個View add到WindowManager時,WindowManagerImpl建立一個ViewRoot來管理該窗口的根View。,並經過ViewRoot.setView方法把該View傳給ViewRoot。
ViewRoot用於管理窗口的根View,並和global window 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。
總之,每一個窗口對應着一個Window對象,一個根View和一個ViewRoot對象。要想建立一個窗口,能夠調用WindowManager的addView方法,做爲參數的view將做爲在該窗口上顯示的根view。