Activity、Window与View关系及显示机制.pdfVIP

  • 0
  • 0
  • 约6.64千字
  • 约 8页
  • 2026-03-11 发布于北京
  • 举报

Activity、Window和View之间的关系

一、简述如何将Activity展现在上

提示:

Activity本身无法直接处理显示哪些控件(view),而是通过PhoneWindow来进行显示的。

换句话说:Activity的作用就是创建PhoneWindow,并将需要显示的视图(vie

w)交给PhoneWindow来处理显示。

1、在Activity创建时调用attach方法:

2、在attach方法中会调用Manager.makeNewWindow();实际上执行的是

I接口的makeNewWindow方法。

1、其中创建了一个window(可以比喻为在一个房子上造了一个窗户):mWindow

Manager.makeNewWindow(this);

2、在window类中,才调用了setContentView(),这是最终的调用。

在Activity的setContentView方法中,实际上是调用:

getWindow().setContentView(view,params);

这里的getWindow()就是获取到一个Window对象。

提示:

为什么attach优先于onCreate调用,是因为在attach方法中,会创建window,

有了window才能调用setContentView。

3、在I的实现类中创建了PhoneWindow:

1、由mWindow=Manager.makeNewWindow(this);

2、这里的makeNewWindow(this);方法中,返回的是:return

s.makeNewWindow(context);

3、这个s实际是一个接口,其实现类是,其中只是创建了一个PhoneWindow

4、在PhoneWindow的setContentView中向ViewGroup(根)中添加了需要显示的内容

1、PhoneWindow是继承自Window的

2、在setContentView方法中,需要先判断mContentParent是否为空,因为默认情况

下,任何内容都未创建

此时需要创建:installDecor(),DecorView是最顶层的显示视图

可以通过ADT中的tools目录下的hierarchyviewer.bat工具,查看的视图结构

3、DecorView:继承自FrameLayout,作为父容器存在,是最初始的显示视图

4、下次再加载的时候,mContentParent就不为空了,会将其中的所有view移除掉,

然后通过布局填充器加载布局。

二、三者关系:

Activity、Window和View之间的关系

一、简述如何将Activity展现在上

Tips:

Activity本身是没办法处理显示什么控件(view)的,是通过PhoneWindow进行显示的

换句话说:activity就是在造PhoneWindow,显示的那些view都交给了PhoneWindow

处理显示

1、在Activity创建时调用attach方法:

2、attach方法中会调用Manager.makeNewWindow();实际工作的是I接口的

makeNewWindow方法

①、其中创建了一个window(可以比喻为一个房子上造了一个窗户):mWindow=

Manager.makeNewWindow(this);

②、在window这个类中,才调用了setContentView(),这是最终的调用

在Activity的setContentView方法中,实际上是调用:getWindow().setContentView(view,

params);

这里的getWindow()就是获取到一个Window对象

Tips:

为啥attch优先于onCreate调用,就是由于在attch方法中,会创建window,有了window

才能调用setContentView

3、在I的实现类中创建了PhoneWindow:

①、由mWindow=Manager.makeNewWindow(t

文档评论(0)

1亿VIP精品文档

相关文档