PhoneWindow & Activity


Activity的UI的层次结构


DecorView 是什么?

DecorView是ViewTree最顶层的View。

DecorView与PhoneWindow的关系


Activity的UI结构对照

一个简单的Activity:继承自Activity


UI结构对照图


Activity的UI 组建过程


note1: attach的执行

attach其中的两件事

  1. 创建PhoneWindow。
  2. 给当前Activity的引用传递给PhoneWindow。(当有事件发生时,可以通过这个引用传递给Activity)。

note2: Activity中执行setContentView

getWindow执行了什么


mWindow是什么?正是attach方法中新创建的PhoneWindow


实际上是执行的PhoneWindow的setContentView方法。

note3: PhoneWindow的setContentView方法。

mContentParsent正是Activity main.xml的父容器。

对于非空判断,开始时,自然是空的。便会先执行installDecor来创建DecorView

note4: PhoneWindow 执行setContentView时,会先创建DecorView。

首先创建了DecorView。

然后给mContentParent引用赋了值。

note5: 创建DecorView


note6: 生成 Activity main.xml文件的父容器, mContentParent。

mContentParent是一个id 为 content的ViewGroup。

generateLayout

note7: 要想找到mContentParent引用,还需要先将含有id 为 content的layout xml添加到DecorView,也就是DecorView的子view,mContentParent 的父容器:System layout.

由于示例继承自Activity。而非其他含有action bar 的Activity,此处的system layout是 R.layout.screen_simple。

系统内置的这个screen_simple.xml是什么?

可以发现,里面确实有一个id为content的ViewGroup。这正是我们需要放置main.xml的父容器。

当找到了screen_simple的layout id后,执行了DecorView.onResourcesLoaded的。

可以知道Decor将inflate出来的system layout作为child放到了DecorView中。

note8: 把Activity的布局添加到mContentParent中。


此时,我们加载了View,下面需要将其添加到Window


添加到Window之后,通过ViewRootImpl.performTraversals,进行测量、布局、绘制。





本文参考了

http://blog.csdn.net/windskier/article/details/6957854

谢谢!











  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值