前言
作为一个工作了三年的android程序员,突入起来的觉得自己一直都是浑浑噩噩,开发过程中经常都是用到什么去查什么,这样日积月累也算是积累了一点经验,可这种所谓的经验近来让我觉得越来越没有安全感。开发中经常都是开发工具提示着撸代码,或者复制粘贴,对于原理和更深入一点的东西一知半解,或者根本不清楚,也觉得不会的东西越来越多,是时候恶补一下了。
混子也得知道的
上图比较形象
activity构成需要记住的几个点
1. Window是一个抽象类,提供了绘制窗口的一组通用API
2. PhoneWindow是Window的具体实现类,并且该类包含了一个DecorView对象,DecorView是所有应用窗口,也就是Activity界面的根view。
3. DecorView 是FrameLayout的子类,是对FrameLayout的功能的修饰。
跟着源码看一看是怎么回事儿,帮助理解和记忆。
1.从Activity的setContentView方法开始,点进去会看到Activity源码中的setContentView方法
一说明:这里做了两件事情:
调用了Window的setContentView方法,我们知道PhoneWindow是Window的唯一实现类,所以这里需要去phonewindow中查看setContentView方法都做了些什么。
初始化Decor的ActionBar
2. 查看PhoneWindow的setContentView方法
二说明:这里重点的是 installDecor()方法,同时将我们传入的布局资源id加载到一个mContentParent中,所以继续往里看,这个方法干了什么,这个mContentParent是什么。
3、installDecor()方法查看
三说明:这里我们可以看到mContentParent是怎么来的,首先是通过generateDecor(-1)这个方法创建一个DecorView,然后将它作为参数传递到generateLayout()方法中去,就得到了mContentParent。那就需要在往下看,这两个方法都做了什么。
4、generateDecor方法和generateLayout方法
generateDecor方法中我们可以看到,他最后就是返回了一个DecorView,重点在generateLayout方法
通过源码我们可以看到,generateLayout方法分为两个部分,前面的是在根据各种设置配置各种属性,加载过程来说后半部分比较重要
四说明:这样就比较清楚了,在activity中setContentView方法事实上就是将我们自己创建的布局文件放到了DecorView中的content部分,最开始的结构图中的结构和资源文件为什么那样对应也就清楚了。
总结
第一次写,很生硬,算是试水,写完才发现,编辑模式除了富文本,还有markdown。希望以后自己坚持做输出,让自己能在表达上有多进步,也能帮助自己加深理解和记忆,当然也希望能对看到的人有所帮助。
坚持!坚持!坚持!立个flag。
网友评论