Activity-Window-View三者的关系
Activity-Window-View三者的关系首先分别介绍下这三者:Activity是安卓四大组件之一,负责界面展示、用户交互与业务逻辑处理;Window就是负责界面展示以及交互的职能部门,就相当于Activity的下属,Activity的生命周期方法负责业务的处理;View就是放在Window容器的元素,Window是View的载体,View是Window的具体展示。然后一句话介绍下三者的关
Activity-Window-View三者的关系
- Activity是安卓四大组件之一,负责界面展示、用户交互与业务逻辑处理;
- Window就是负责界面展示以及交互的职能部门,就相当于Activity的下属,Activity的生命周期方法负责业务的处理;
- View就是放在Window容器的元素,Window是View的载体,View是Window的具体展示。
然后一句话介绍下三者的关系:
Activity通过Window来实现视图元素的展示,window可以理解为一个容器,盛放着一个个的view,用来执行具体的展示工作。
当我们运行程序的时候:
- 在Activity中调用attach,创建了一个Window
- 创建的window是其子类PhoneWindow,在attach中创建PhoneWindow
- 在Activity中调用setContentView(R.layout.xxx)
- 其中实际上是调用的getWindow().setContentView()
- 调用PhoneWindow中的setContentView方法
- 创建ParentView: 作为ViewGroup的子类,实际是创建的DecorView(作为FramLayout的子类)
- 将指定的R.layout.xxx进行填充 通过布局填充器进行填充【其中的parent指的就是DecorView】
- 调用到ViewGroup
- 调用ViewGroup的removeAllView(),先将所有的view移除掉
- 添加新的view:addView()
最后总结:
Window和View的关系
window是一个界面的窗口(唯一的实现类是PhoneWindow),是存放view的容器,即Window是View的管理者,或者说是附着在Window上的。Android中所有的视图都是通过Window来呈现的,比如Activity,Dialog,Toast,他们的视图都是附着在Window上的。比如我们常用的弹出对话框时,把背景变暗,就是通过折这Window的alpha值来实现的。Window的添加、删除和更改是通过WindowManager来实现的。而WindowManager又是继承ViewManager的
ViewManager是一个接口有三个方法:
可见WindowManager也是一个接口,它的具体实现类是WindowManagerImpl
可见,他的addView,removeView和updateView都是通过WindowManagerGloabal实现的。WindowManagerGloabal内部最终是通过WindowManagerService来创建Window的。
Activity与Window的关系
我们知道,Activity是向用户展示一个界面,并可以与用户进行交互。通过我们之前的分析,我们知道,Activity内部持有一个Window对象,用来管理View。由此可知,window就像是Activity的一个手下,为Activity管理View,就连事件的分发,也是Activity先发给Window,然后window再向下分发。我们看一下Activity的代码:
事件传来之后,调用Window的superDispatchTouchEvent(ev)方法,由其实现类PhoneWindow做具体实现,看一下PhoneWindow中这个方法:
他又调用mDecor的superDispatchTouchEvent(ev)方法。然后跟进去可以看到如下代码:
继续跟踪代码可以看到:
由于DecorView是继承自FrameLayout的,而FrameLayout又继承自ViewGroup,所以下面进入了ViewGroup的事件分发的流程。
注:一个Activity构造的时候只能初始化一个Window(PhoneWindow),另外这个PhoneWindow有一个”ViewRoot”,这个”ViewRoot”是一个View活ViewGroup,是最初始的跟视图,然后通过addView方法将View一个个层叠到ViewRoot上,这些层叠的View最终放在Window这个载体上面
参考链接:https://blog.csdn.net/A448955639/article/details/77430263
更多推荐
所有评论(0)