返回

Activity 绘制流程之 setContentView 细节大公开

Android

在Android开发中,Activity是应用程序的基本构建块。每个Activity都对应一个屏幕,用户可以通过点击、滑动等手势来与之交互。为了让Activity能够显示内容,我们需要使用setContentView方法来加载布局文件,从而构建视图树。

setContentView方法的原型如下:

public void setContentView(@LayoutRes int layoutResID)

其中,layoutResID是一个资源ID,它指向了一个布局文件。布局文件是一个XML文件,它了Activity中要显示的UI元素,比如按钮、文本框、图片等。

当setContentView方法被调用时,Android系统会执行以下步骤:

  1. 加载布局文件:Android系统会根据layoutResID加载相应的布局文件。
  2. 构建视图树:Android系统会根据布局文件中的定义,构建一个视图树。视图树是一个层次结构,它由多个视图组成。每个视图都对应一个UI元素,比如按钮、文本框、图片等。
  3. 将视图树附加到Activity:Android系统会将构建好的视图树附加到Activity上。这样,Activity就可以在屏幕上显示内容了。

在setContentView方法执行过程中,Android系统会与PhoneWindow进行交互。PhoneWindow是Activity的一个内部类,它负责管理Activity的窗口。当setContentView方法被调用时,Android系统会首先创建一个PhoneWindow对象,然后调用PhoneWindow的setContentView方法来加载布局文件并构建视图树。

PhoneWindow的setContentView方法的原型如下:

public void setContentView(View view)

其中,view是一个视图对象。视图对象是一个抽象类,它代表了UI元素。在Android中,所有UI元素都继承自View类。

当PhoneWindow的setContentView方法被调用时,Android系统会执行以下步骤:

  1. 创建一个DecorView对象:DecorView是一个FrameLayout的子类,它负责管理Activity的根视图。
  2. 将view添加到DecorView中:Android系统会将view添加到DecorView中。这样,view就可以在Activity中显示了。
  3. 将DecorView附加到Activity:Android系统会将DecorView附加到Activity上。这样,Activity就可以在屏幕上显示内容了。

setContentView方法是Activity绘制流程中的一个重要步骤。它负责加载布局文件并构建视图树。Android系统会与PhoneWindow进行交互,以完成setContentView方法的执行。