Activity ,view 和window之间的区别

先来了解下 他们是什么 然后在来看看他们之间的关系:

1.activity:是Android的四大组件之一,他并不负责视图控制,它只是控制生命周期和处理事件。真正控制视图的是 Window。一个 Activity 包含了一个 Window,Window才是真正代表一个窗口.

2.window :

 Window的理解比较抽象,Window相当于一个容器,里面“盛放”着很多View,这些View是以树状结构组织起来的。

        Window 是一个抽象类,实际在 Activity 中持有的是其子类 PhoneWindow。PhoneWindow 中有个内部类DecorView,通过创建DecorView来加载 Activity 中设置的R.layout.activity,Window 是视图的承载器,内部持有一个 DecorView,而这个 DecorView才是 view 的根布局。
Window 通过 WindowManager 将 DecorView 加载其中,并将 DecorView 交给 ViewRoot,进行视图绘制以及其他交互。
3.view :

view在android系统中,是通过树形结构来管理的,View树形结构如下,

        其中,DecorView 是 FrameLayout 的子类,它可以被认为是 Android 视图树的根节点视图。

        DecorView 作为顶级 View,一般情况下它内部包含一个竖直方向的 LinearLayout,在这个 LinearLayout 里面有上下三个部分,上面是个 ViewStub,延迟加载的视图(应该是设置ActionBar,根据 Theme 设置),中间的是标题栏(根据Theme设置,有的布局没有),下面的是内容栏。

2.1 Activity与Window
        每一次创建Activity实例后,接着会调用Activity.attach()来初始化一些内容。而Window对象就是在attach里进行创建初始化赋值的。在attach()里,系统会创建Activity所属的Window对象并为其设置回调接口。由于Activity实现了Window的Callback接口,因此当Window接收到外界的状态改变就会回调到Activity的方法。

2.2 Window与View
        在了解Window与View之间的关系之前我们需要知道ViewRoot(ViewRootImpl)到底是什么。它是连接WindowManager和DecorView的纽带。

ViewRoot是一个ViewTree的管理者,而不是ViewTree的根节点。
严格意义上说,ViewTree的根节点只有DecorView。
ViewRoot将DecorView和PhoneWindow(Activity创建的Window实例)“组合”起来。
2.3 Window与View
        View是Android中的视图呈现方式,但是View不能单独存在,它必须附着在Window这个抽象的概念上面,因此有视图的地方就有Window。

        最熟悉的方法就是在Activity.onCreate()方法中调用setContentView()方法,传入指定的布局文件。Activity将具体实现交给了Window处理,而Window的具体实现是PhoneWindow在setContentView中创建了DecorView,DecorView是整棵View树的根View,然后将制定的布局文件添加到DecorView的mContentParent中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值