Activity和Window及View之间的关系

    要说这个问题Activity与Window及View之间的关系,首先讲解下Activity是怎么显示布局的。我们知道通过setContentView或者LayoutInflater可以加载一个布局到Activity上,那么这个过程是怎样执行的呢?

   执行setContentView的时候,进入Activity里面的源码可以知道,这个方法是Window对象执行的,也就是说Activity是没有办法直接处理View的,而是通过Window对象来显示的,关联源码可以知道Window对象是抽象类,这个时候通过Debug模式可以知道Window的具体实现时PhoneWindow,在PhoneWindow里面实现了setContentView方法。通过setContentView(layoutResID)设置布局,也使用了LayoutInflater来动态加载布局的。

  第二个问题:Window对象是怎么被创建的呢?

  就是Activity加载的时候,会执行Activity里面的attach方法,这里对Window对象进行初始化,这里的attach方法必须比onCreate方法优先调用,因为在onCreate方法里面要执行setContentView方法,要先有Window对象才能调用setContentView方法。

  第三个问题:View对象最后添加到哪去了呢?

  在setContentView的参数里面,会获取到一个View对象,然后会把这个View对象添加到一个ViewGroop(mContentParent)中。

注意事项:

1、PhoneWindow才是实例化View的对象。

2、一个Activity对应着一个PhoneWindow,所以Acitity是在创造窗体,它本身并不能处理View的操作。

3、DecorView是一个顶级的View,它包含整个布局,在HiaracyViewer可以看得出来。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值