Window、Activity、DecorView以及ViewRoot之间的关系
来源:互联网 发布:做软件开发怎么样 编辑:程序博客网 时间:2024/05/21 09:12
Activity
Activity并不负责视图控制,它只是控制生命周期和处理事件。真正控制视图的是Window。一个Activity包含了一个Window,Window才是真正代表一个窗口。Activity就像一个控制器,统筹视图的添加与显示,以及通过其他回调方法,来与Window、以及View进行交互。
Window
Window是视图的承载器,内部持有一个 DecorView,而这个DecorView才是 view的根布局。Window是一个抽象类,实际在Activity中持有的是其子类PhoneWindow。PhoneWindow中有个内部类DecorView,通过创建DecorView来加载Activity中设置的布局 R.layout.activity_main 。Window 通过WindowManager将DecorView加载其中,并将DecorView交给ViewRoot,进行视图绘制以及其他交互。
DecorView
DecorView是FrameLayout的子类,它可以被认为是Android视图树的根节点视图。DecorView作为顶级View,一般情况下它内部包含一个竖直方向的LinearLayout,在这个LinearLayout里面有上下三个部分,上面是个ViewStub,延迟加载的视图(应该是设置ActionBar,根据Theme设置),中间的是标题栏(根据Theme设置,有的布局没有),下面的是内容栏。
ViewRoot
ViewRoot可能比较陌生,但是其作用非常重大。所有View的绘制以及事件分发等交互都是通过它来执行或传递的。ViewRoot对应ViewRootImpl类,它是连接WindowManagerService和DecorView的纽带,View的三大流程(测量(measure),布局(layout),绘制(draw))均通过ViewRoot来完成。ViewRoot并不属于View树的一份子。从源码实现上来看,它既非View的子类,也非View的父类,但是,它实现了ViewParent接口,这让它可以作为View的名义上的父视图。RootView继承了Handler类,可以接收事件并分发,Android的所有触屏事件、按键事件、界面刷新等事件都是通过ViewRoot进行分发的。
下面结构图可以清晰的揭示四者之间的关系:
- Window、Activity、DecorView以及ViewRoot之间的关系
- Window、Activity、DecorView以及ViewRoot之间的关系
- Android 中Activity、Window、ViewRoot、DecorView之间的联系
- Android中Activity, View,Window,DecorView之间的关系
- PhoneWindow,ViewRoot,Activity之间的大致关系
- PhoneWindow,ViewRoot,Activity之间的大致关系
- PhoneWindow,ViewRoot,Activity之间的大致关系
- PhoneWindow,ViewRoot,Activity之间的大致关系
- Activity、View、Window、DecorView的关系
- android中View, Window, Activity, WindowManager,ViewRoot几者之间的关系
- android中View, Window, Activity, WindowManager,ViewRoot几者之间的关系
- android 中View, Window, Activity, WindowManager,ViewRoot几者之间的关系
- android 中View, Window, Activity, WindowManager,ViewRoot几者之间的关系
- android4.0.1 Activity的Window,DecorView 之间关系的建立过程分析
- android发现之旅之ViewRootImpl,Activity,Window,DecorView之间的关系
- PhoneWindow,ViewRoot,Activity之间的大致关系 - 3
- decorView和window之间的层级及关系
- decorView和window之间的层级及关系
- linux cpu 频率
- jquery i18n(前端国际化)
- Linux6.8下Memcached安装与启用
- 一个超级简单的服务器框架
- 如何查看JDK以及JAVA框架的源码
- Window、Activity、DecorView以及ViewRoot之间的关系
- Intellij Idea使用(一) -- 安装Idea
- 第一阶段-入门详细图文讲解tensorflow1.4 -简介(一)
- 浅谈BFC—CSS的低调大佬
- 用原生js写全屏滚动
- Android horizontal+listview 横向显示
- Microsoft Office 2016 简体中文版
- 通过经纬度计算距离,可以用来得到周边500米内的商家。mybatis中的Sql语句实现
- 狗屎一样的React(第七节,前端路由这个玩意)