Activity,View,Window
和
WindowManager
之间的关系
View
:最基本的
UI
组件,表示屏幕上的一个矩形区域。
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
。
Activity,View,Window和WindowManager之间的关系和
WindowManager
之间的关系
View
:最基本的
UI
组件,表示屏幕上的一个矩形区域。
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
。