Android 视图架构学习笔记
2016-09-09 01:15
387 查看
Android 视图架构学习笔记
Activity并不负责视图控制,它只是控制生命周期和处理事件,真正控制视图的是Window。一个Activity包含了一个Window,Window才是真正代表一个窗口,也就是说Activity可以没有Window,那就相当于是Service了。在ActivityThread中也有控制Service的相关函数或许正好印证了这一点。
Activity的setContentView实际上是调用了Window的setContentView方法。
Window通过installDecor来新建DecorView。
DecorView是FrameLayout的子类,它可以被认为是Android视图树的根节点视图。DecorView作为顶级View,一般情况下它内部包含一个竖直方向的LinearLayout,在这个LinearLayout里面有上下两个部分(具体情况和Android版本及主体有关),上面的是标题栏,下面的是内容栏。在Activity中通过setContentView所设置的布局文件其实就是被加到内容栏之中的,而内容栏的id是content,在代码中可以通过ViewGroup
content = (ViewGroup)findViewById(R.android.id.content)来得到content对应的layout。
Window中有几个视图相关的比较重要的成员变量如下所示:
mDecor:DecorView的实例,标示Window内部的顶级视图
mContentParent:setContetView所设置的布局文件就加到这个视图中
mContentRoot:是DecorView的唯一子视图,内部包含mContentParent,标题栏和状态栏。
ViewRoot对应ViewRootImpl类,它是连接WindowManagerService和DecorView的纽带,View的三大流程(测量(measure),布局(layout),绘制(draw))均通过ViewRoot来完成。ViewRoot并不属于View树的一份子。从源码实现上来看,它既非View的子类,也非View的父类,但是,它实现了ViewParent接口,这让它可以作为View的名义上的父视图。RootView继承了Handler类,可以接收事件并分发,Android的所有触屏事件、按键事件、界面刷新等事件都是通过ViewRoot进行分发的。ViewRoot可以被理解为“View树的管理者”——它有一个mView成员变量,它指向的对象和上文中Window和Activity的mDecor指向的对象是同一个对象。
Activity的Touch事件事实上是调用它内部的Window的ViewGroup的Touch事件,可以直接当成ViewGroup处理。(这就是为什么在activity中有onTouchEvent())
Activity和Window
Activity并不负责视图控制,它只是控制生命周期和处理事件,真正控制视图的是Window。一个Activity包含了一个Window,Window才是真正代表一个窗口,也就是说Activity可以没有Window,那就相当于是Service了。在ActivityThread中也有控制Service的相关函数或许正好印证了这一点。Activity的setContentView实际上是调用了Window的setContentView方法。
Window通过installDecor来新建DecorView。
Window,Activity和DecorView
DecorView是FrameLayout的子类,它可以被认为是Android视图树的根节点视图。DecorView作为顶级View,一般情况下它内部包含一个竖直方向的LinearLayout,在这个LinearLayout里面有上下两个部分(具体情况和Android版本及主体有关),上面的是标题栏,下面的是内容栏。在Activity中通过setContentView所设置的布局文件其实就是被加到内容栏之中的,而内容栏的id是content,在代码中可以通过ViewGroupcontent = (ViewGroup)findViewById(R.android.id.content)来得到content对应的layout。
Window中有几个视图相关的比较重要的成员变量如下所示:
mDecor:DecorView的实例,标示Window内部的顶级视图
mContentParent:setContetView所设置的布局文件就加到这个视图中
mContentRoot:是DecorView的唯一子视图,内部包含mContentParent,标题栏和状态栏。
Window,DecorView 和 ViewRoot
ViewRoot对应ViewRootImpl类,它是连接WindowManagerService和DecorView的纽带,View的三大流程(测量(measure),布局(layout),绘制(draw))均通过ViewRoot来完成。ViewRoot并不属于View树的一份子。从源码实现上来看,它既非View的子类,也非View的父类,但是,它实现了ViewParent接口,这让它可以作为View的名义上的父视图。RootView继承了Handler类,可以接收事件并分发,Android的所有触屏事件、按键事件、界面刷新等事件都是通过ViewRoot进行分发的。ViewRoot可以被理解为“View树的管理者”——它有一个mView成员变量,它指向的对象和上文中Window和Activity的mDecor指向的对象是同一个对象。
相关文章推荐
- API Demos 2.3 学习笔记 (1)-- Android应用程序架构
- 学习笔记:Android系统架构
- View学习笔记(1)-Android控件架构
- Android Span架构学习笔记
- 《Android群英传》学习笔记 ---Android系统架构
- android 从顶层到底层 学习笔记--- framework架构
- android 学习笔记(九)android底层架构9.1 Android MediaPlayer
- Android 架构概况,学习笔记。
- 安卓学习笔记---完美解决Android的WebView加载失败(404,500),显示的自定义视图
- Android应用开发学习笔记之网格视图
- Android开发学习笔记:浅谈DDMS视图
- Android开发学习笔记:浅谈DDMS视图
- android底层架构学习笔记
- Android系统架构学习笔记
- Android应用开发学习笔记之画廊视图
- android 显示架构学习笔记
- Android系统架构(简述)——《深入理解(I)》学习笔记1
- Android GPS学习笔记—系统架构
- Android第一行代码学习笔记一----android架构
- Android系统架构(Android第一行代码学习笔记1)