关于Activity、Window、View的关系

Activity本身是没办法处理控件(View)的,是通过PhoneWindow进行显示的;换句话说,也就是Activity创造了PhoneWindow,处理显示那些View都是交给PhoneWindow。接下来是具体的操作步骤:
1、在Activity创建的时候调用attach方法:
2、attach方法会调用policyManager.makeNewWindow()(这个policyManager.makeNewWindow方法其实是调用的IPolicy接口)
(1)在attach中创建一个window(在一个房子上造了一个窗户),mWindow = PolicyManager.makeNewWindow(this);
(2)在window这个类中,调用setContentView(),这是最终的调用。在Activity的setContentView方法中,实际上是调用:getWindow().setContentView(view, params);
这里的getWindow()就是获取到一个Window对象
3、在PhoneWindow的setContentView中向ViewGroup(root)中添加了需要显示的内容
(1)phonewindow是window的子类
(2)setContentView这个方法中,需要先判断一个mContentParent是否为空,因为在默认进来的时候,什么都没创建呢此时需要创建:installDecor(),DecorView是最根上的显示的可以通过adt中的的tools中有个hierarchyviewer.bat的工具,可以查看手机的结构)
(3)DecorView:是继承与FrameLayout的,作为parent存在,最初显示的
(4)下次再加载的时候,mContentParent就不为空了,会将其中的所有的view移除掉,然后在通过布局填充器加载布局

三者之间的关系:
1、acitvity中调用attach方法,创建一个phonewindow
2、创建的这个phonewindow,其实是Window的子类
3、在activity中调用setContentView(R.Layout.XXX)
4、其实是activity间接的通过phonewindow调用的:getWindow().setContentView()。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值