简述View加载流程(setContentView) ?
参考答案:
View加载流程(setContentView)主要涉及以下几个步骤:
- 解析布局资源:当调用setContentView方法时,系统会首先解析XML布局文件或动态代码中的View。这个过程会通过反射机制将View的相关属性解析为对应的Java对象,并进行初始化。这涉及到View的构造函数、XML布局文件解析器以及相关资源加载。
- 创建View树:系统会循环解析好的布局资源,取出布局的根节点,并通过createViewFromTag方法生成根节点View。接着,递归地调用rInflateChildren方法生成整个布局View树。
- 添加到DecorView:生成的View树会被添加到DecorView的root根布局上。DecorView是一个特殊的ViewGroup,它负责整个窗口界面的最顶层View的加载和管理。
- 加载子Decor布局:在setContentView方法中,会调用ensureSubDecor()来确保子Decor布局的创建。这个过程会调用createSubDecor()方法来创建mSubDecor实例,它通常是一个ViewGroup类型,并包含标题部分和一个id为content的内容布局(通常是FrameLayout类型)。
- 布局添加到内容区域:最后,将布局通过addView(v)方法添加到mSubDecor布局中的content内容布局里面。这样,View就被成功加载并展示在屏幕上。
在整个加载流程中,系统还会对View进行测量和布局。测量过程是通过调用View的measure()方法来确定View的宽度和高度,而布局过程则是通过调用View的layout()方法来决定View在父容器中的位置。
总之,View加载流程(setContentView)是一个复杂而精细的过程,它涉及到解析布局资源、创建View树、添加到DecorView、加载子Decor布局以及布局添加到内容区域等多个步骤。这些步骤共同确保了View能够正确、高效地展示在屏幕上。