我们都知道布局文件的加载是在Activity的onCreate()方法中,使用setContentView进行加载
这个方法是个重载方法
它们无一例外都是使用的getWindow()进行加载
那么window是在什么时候创建的呢?
我们知道Acitivity的生命周期是从onCreate开始的, 其实在它之前还有一个方法已经被执行了, 那就是attach方法
PolicyManager创建了一个新的Window对象
接下来
我们进入到PolicyManager类中
IPolicy是个接口
我们需要找到它的实现类,通过寻找发现Pollicy.java实现了IPolicy接口
实现代码如下:
直接创建了一个PhoneWindow对象,
那么意味着 每创建一个Activity都会创建一个PhoneWindow对象
那么PhoneWindow与Window到底是什么关系呢?
PhoneWindow是Window的子类
那么到此为止, 我们知道了其实Activity中的setContentView实际上是PhoneWindow在处理
我们找到PhoneWindow.java能发现其对应的方法
这里面的是三个重载方法咱们一个一个来分析
首先第一个
咱们平常开发时在xml中写的布局并不是根结点, 而是contentParent的子view
总结
它们之间的关系可以大致理解为:
Activity: 相当于一栋房子
Window: 相当于房子里的一扇窗户
View: 相当于窗户上的一朵窗花
它们三个的创建顺序为:
Activity—>Window—>View
具体时序图如下:
本帖附件
乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站