Android中Activity、View和Window关系详解

 Android系统启动篇

1,《android系统启动流程简介》

2,《android init进程启动流程》

3,《android zygote进程启动流程》

4,《Android SystemServer进程启动流程》

5,《android launcher启动流程》

6,《Android Activity启动过程详解》

Android系统开发准备篇

1,《Android 源码下载和编译》

2,《android 11源码编译和pixel3 刷机》

3,《Android Framework代码IDE加载和调试》

Android系统开发实践篇

1,《android设置默认输入法》

2,《android framework预制APK应用》

3,《Android系统层面限制应用开机自启动详解》

4,《android单独编译framework模块并push》

5,《Android Framework开发系统问题分析》

Android系统开发核心知识储备篇

1,《Android编译系统-envsetup和lunch代码篇》

2,《Android编译系统-概念篇》

3,《android日志系统详解》

4,《Android系统Handler详解》

5,《Android系统Binder详解》

6,《Android中Activity、View和Window关系详解》

7,《android view绘制流程详解》

8,《Android读取系统属性详解》

9,《android 窗口管理机制详解》

10,《初识Android系统》

11,《android中AMS进程通知Zygote进程fork新进程的通信方式》

Android核心功能详解篇

1,《android应用市场点击下载APK安装详解》

2,《Android 手势导航(从下往上滑动进入多任务页面)》

3,《android手势分析(应用界面左往右边滑动退出应用)》

4,《android应用安装流程详解》

5,《android11安装应用触发桌面图标刷新流程》

6,《Android系统多任务Recents详解》

7,《android系统导航栏视图分析》

———————————————————————————————————————————

目录

一,背景介绍

1.1 Activity

1.2 Window

1.3 View

二,关系描述

2.1 Activity与Window

2.2 Window与View

2.3 Window与View

2.4 Activity 与 PhoneWindow 与 DecorView 关系


一,背景介绍

Window、Activity、View都经常用到,但三者关系还是没有系统的理清,今天咱们就开始整理整理这三者的关系:

        Window:顶级窗口外观和行为策略的抽象基类。唯一实现是 PhoneWindow类。

        Activity:四大组件之一,它提供一个界面让用户点击和各种滑动操作。

        View:代表用户界面组件的基本构建块,UI 组件。

1.1 Activity

        Activity 并不负责视图控制,它只是控制生命周期和处理事件。真正控制视图的是 Window。一个 Activity 包含了一个 Window,Window才是真正代表一个窗口。Activity就像一个人机交互界面,统筹视图的添加与显示,以及通过其他回调方法,来与 Window、以及 View 进行交互。

1.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,进行视图绘制以及其他交互。

1.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中。

2.4 Activity 与 PhoneWindow 与 DecorView 关系

        Activity 与 PhoneWindow 与 DecorView 关系图,


 

猜你喜欢

转载自blog.csdn.net/allen_xu_2012_new/article/details/131109579