首先了解一下Activity相关的知识
Activity,Window,View 三者之间的关系
首先我们来看一张图
图中的
Window
是什么?
Window
原来是Activity
的一个变量,可以通过getWindow()
获取,而且Activity
中经常用到的setContentView
原来调用的是window
的setContentView
。
Google说Window
是WindowManager
最顶层的视图,它负责背景(窗口背景)、Title
之类的标准的UI元素,Window
是一个抽象类,整个Android系统中PhoneWindow
是Winodw
的唯一实现类。Activity充当了什么角色?他不是顶层窗口吗?
Activity
实际意义上说,他并不能叫做一个容器或者窗口,他只是充当了一个控制器的角色,而屏幕上最外层的容器实际上是DecorVIew
,而DecorView
实际上是一个FrameLayout
,他的里面又有一个垂直的LinearLayout
,LinearLayout
下面又有两个FrameLayout
,第一个FrameLayout
是一个默认只有一个TextVIew
的标题栏,而第二个FrameLayout
则是我们在Activity
中onCreate
中set的ContentView
可以看到DecorView
是在Window
中的,DecorView
分为了两块区域,上面是标题栏,而绿色区域就是我们在Activity
的setContentView()
中设置的布局区域。
android的UI框架基本知识
Activity 是应用程序的基本组成部分,提供了可视的界面,与用户进行交互;
具体Acitivity是怎么样显示这些事视图元素以及响应事件交互的:
Activity:Activity包含一个Window,该Window在Activity的attach方法中通过调用PolicyManager.makeNewWindo
创建;
View:最基本的UI组件,表示屏幕上的一个矩形区域;
DecorView:是Window中View的RootView,设置窗口属性;
Window:表示顶层窗口,管理界面的显示和事件的响应;每个Activity 均会创建一个
PhoneWindow对象,是Activity和整个View系统交互的接口
WindowManager:一个interface,继承自ViewManager。所在应用进程的窗口管理器;
有一个implementation WindowManagerImpl;
主要用来管理窗口的一些状态、属性、view增加、删除、更新、窗口顺序、消息收集和处理等。
ViewRoot:通过IWindowSession接口与全局窗口管理器进行交互:界面控制和消息响应;
ActivityThread:应用程序的主线程,其中会创建关联当前Activity与Window;
创建WIndowManager实现类实例,把当前DecoView加入到WindowManager;
相关类结构图