分享原因:
1.不知道activity中setContentView显示界面怎么实现的。
2.界面空间树概念
3.模式的使用
4.是面试题
Activity是android的显示视图吗?
Activity、Window、View的关系是什么?
LayoutInflater是做什么的?
layoutInflater.inflate()做什么的?
Activity启动过程初始Window对象及使用WindowManager
Activity的setContentView过程中Window加载View
Activity:
setContentView()for adding view
attach()for starting
PolicyManager 实现Ipolicy接口
Policy
phoneWindow makeNewWindow()
PhoneWindow----》Window setContentView()
setContentView()
PhoneWindow
addContentView()
ViewGroup---》View
addView()
layoutInflater 把资源文件构造实例化
from()
代码跟踪:
Activity.java
attach()中
mWindow = PolicyManager.makeNewWindow(this); 返回Window类型,返回PhoneWindow,Window是个抽象类。
PolicyManager.java
makeNewWindow()调用Ipolicy接口的函数。Ipolicy是Policy来实现的。
Policy.java
makeNewWindow()new一个PhoneWindow返回。
PhoneWindow.java
Window是个抽象类,通过也是唯一的实例化类PhoneWindow来实例化。
构造函数中如何实例化的:
LayoutInflater.from()返回一个实例
Activity.java
setContentView()中getWindow()先得到当前窗体,setContentView()
PhoneWindow.java
setContentView()中ViewGroup的对象addView()
1、一个Activity构造的时候一定会构造一个Window(PhoneWindow),并且只有一个。
2、这个窗户有一个ViewRoot(View,ViewGroup).Layout,Layout.Inflater
3、addView()。
4、WindowManagerService接收的西欧阿西,并且回调Activity函数,如onKeyDown()
Activity是控制单元,Window是承载模型,View才是真正的视图
写一个例子,用window的setContentView,参数不指定R资源文件,而直接用把资源文件加载成View对象(实例化成view),通过inflater实现。
rootView,有视图树
学员评论
Dingo妹2014-07-10
你感兴趣的课程