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

本文深入探讨了Android中基本UI组件View、包含View树和布局参数的Window、包含一个Window对象的Activity,以及负责窗口管理的WindowManager之间的相互作用。详细解释了如何在Android应用中创建和管理窗口,包括View的添加、Window的创建以及ViewRoot与WindowManager的交互过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuiran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值