首页 > 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 版权所有
打开技术之扣,分享程序人生!