IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Activity,View,Window和WindowManager之间的关系

    cuiran发表于 2015-12-05 11:24:22
    love 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

    。



沪ICP备19023445号-2号
友情链接