首页 > Windows开发 > 详细

Activity,View,Window和WindowManager之间的关系

时间:2015-12-05 12:55:54      阅读:337      评论:0      收藏:0      [点我收藏+]

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之间的关系 
  
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。

和

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之间的关系

原文:http://blog.csdn.net/cuiran/article/details/50184511

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!