在Activity布局加载流程源码分析(I)、Activity布局加载流程源码分析(II)、DecorView绘制流程源码分析与View绘制三大流程源码分析等四篇文章中,已经很详细分析了Acitivity的布局加载过程及布局的绘制过程。但在Activity布局加载流程源码分析(I) 中,对于setContentView(“资源文件”)怎么转化View的,没有细说,本篇博文主要想梳理一下这块内容(ps:面试的时候,被面试官问到,既然答不上来,所以决定对这部分知识也好好梳理一下)。
在开始分析之前,我们需要了解一些概念,如:
- PhoneWindow: 是Window类具体实现类,Activity中布局加载逻辑主要就是在此类中完成的。
- LayoutInflater: 是布局填充类,主要就是将我们的layout转化为View。
- XmlPullParser: 是XML解析器,主要是解析xml文件也即layout.xml文件。
一、源码分析
从Activity布局加载流程源码分析(I)文中,我们知道,在Activity的onCreate()中setContentView()后,最后也是调用PhoneWindow中的setContentView()方法。源码如下:12345//Activity中public void setContentView(int layoutResID) {getWindow().setContentView(layoutResID);//核心代码initActionBar();}