layout加载流程

Activity的setContentView加载流程

注意:加载流程没有执行view绘制流程

  • 1、ACtivity基类的getWindow().setContentView关联上PhoneWindow
  • 2、PhoneWindow的setContentView()方法中传入了decorView作为LayoutInflater.inflate()的root参数
  • 3、PhoneWindow的setContentView()方法中调用了LayoutInflater的inflate(XmlPullParser, ViewGroup, boolean)方法递归填充布局
  • 4、注意:标签进行单独处理,调用rInflate()方法来递归填充布局
layout加载流程_第1张图片
加载流程

Window,ViewRootImpl,DecorView之间的联系:

一个 Activity 包含一个Window,Window是一个抽象基类,是 Activity 和整个 View 系统交互的接口,只有一个子类实现类PhoneWindow,提供了一系列窗口的方法,比如设置背景,标题等。一个PhoneWindow 对应一个 DecorView 跟 一个 ViewRootImpl,DecorView 是ViewTree 里面的顶层布局,是继承于FrameLayout,包含两个子View,一个id=statusBarBackground 的 View 和 LineaLayout,LineaLayout 里面包含 title 跟 content,title就是平时用的TitleBar或者ActionBar,contenty也是 FrameLayout,activity通过 setContent()加载布局的时候加载到这个View上。ViewRootImpl 就是建立 DecorView 和 Window 之间的联系。

你可能感兴趣的:(layout加载流程)