(十三)Window的创建过程
来源:互联网 发布:c语言中调用文本文件 编辑:程序博客网 时间:2024/05/22 05:02
View是android中视图的呈现方式,但View不能单独存在,必须依附Window这个抽象的概念上,因此有视图的地方就有Window。
Activity的Window的创建过程
Activity的启动过程很复杂,最终会由ActivityThread中的performLaunchActivity()来完成整个启动过程,在此方法中会通过类加载器创建Activity的实例对象,并调用其attach方法来为其关联运行过程中所依赖的一系列上下文环境变量。
在Activity的attach方法中,系统会创建Activity所属的Window对象并为其设置回调接口,Window对象的创建是通过PolicyManager的makeNewWindow方法实现的。
PolicyManager中实现的几个工厂方法全部在策略接口IPolicy中声明了,其真正的实现类是Policy类,在Policy的makeNewWindow方法中,Window的具体实现的确是PhoneWindow。
对于Activity的视图怎样关联到Window上,查看Activity的setContentView方法得知,具体实现是交给了Window的setContentView方法去实现的,又因为Window的具体实现是PhoneWindow,所以查看PhoneWindow的setContentView方法。
大致过程为:
1.如果没有DecorView,那么就创建它
在PhoneWndow的setContentView方法中,DecorView的创建过程是由installDecor方法来完成的,在该方法内部会调用generateDecor方法来直接创建DecorView,此时DecorView是一个空白的FrameLayout。为了初始化布局,PhoneWindow还需通过generateLayout方法(也是在installDecor 中)来加载具体布局到DecorView中。
2.将View添加到DecorView的mContentParent中。
在PhoneWindow的setContentView方法中,通过 mLayoutInflater.inflate(layoutResID, mContentParent);将Activity的视图添加到DecorView的mContentParent中。
3.回调Activity的onCntentChanged方法通知Acivity视图已经改变
由于Activity实现了Window的CallBack接口,这里表示Activity的布局已经添加到DecorView的mContentParent中了,于是通知Activity。使其做相应处理。
此时Activity的布局已经添加到DecorView的mContentParent中了,但是还未被WindowManager识别,正式添加到Window中在ActivityThread的handleResumeActivity方法中,首先会调用Activity的OnResume方法,接着会调用Activity的makeVisible()方法,在makeVisible方法中才完成了添加和显示这两个过程。
Dialog的Window创建过程
1.创建Window,类似Activity的
2.初始化DecorView并将Dialog的视图添加到DecorView中,类似Activity
3.将DecorView添加到Window中并显示。此过程在show方法中进行。
注:Dialog必须采用Activity的Context,如用Application的Context会报错。
阅读全文
0 0
- (十三)Window的创建过程
- 各种Window的创建过程
- Activity的Window创建过程
- Activity 的Window创建过程
- Dialog的Window的创建过程
- Activity的Window的创建过程
- Activity中Window对象的创建过程
- 源码 Activity 的 window 创建过程
- 源码 Toast 的 window 创建过程
- 源码 Dialog 的 window 创建过程
- Android Activity之Window的创建过程
- Android源码解析Window系列第(一)篇---Window的基本认识和Activity的Window创建过程
- Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析
- Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析
- Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析
- Android应用程序窗口(Activity)的窗口对象(Window) 的创建过程分析
- Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析
- Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析
- 【剑指Offer】面试题7:用两个栈实现队列
- android:如何执行NDK
- css案例(一)
- 开发板选择的纠结
- JetBrain系列ide更换主题的方法
- (十三)Window的创建过程
- Git入门
- VMware Workstation12 运行winxp 速度缓慢问题的解决
- c++
- 什么是JAVASCRIPT
- 51nod1873(大数浮点数幂次)
- 自己实现LSTM和GRU内部的代码
- 文件句柄
- SpringBoot使用Gradle构建war包