从源码角度分析Activity与Window及View之间的关系

我们都知道布局文件的加载是在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

具体时序图如下:

本帖附件

点击下载

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%