返回

activity 窗口添加过程剖析

Android

  1. 创建窗口

activity窗口的创建过程始于Activity类的onCreate()方法。在该方法中,Activity类的第一件事就是调用setContentView()方法来加载布局文件。布局文件是一个XML文件,它定义了activity窗口中包含的各种视图元素,如按钮、文本框、图像等。setContentView()方法将布局文件解析成一个View对象,然后将其作为activity窗口的内容视图。

2. 给窗口添加视图

在setContentView()方法之后,Activity类的下一个任务是调用addView()方法将decorView添加到窗口中。decorView是一个特殊的View对象,它包含了activity窗口的所有内容,包括标题栏、菜单栏、内容视图等。addView()方法将decorView作为子视图添加到窗口中,使其成为窗口的内容视图。

3. 把decorView作为窗口添加到屏幕上

最后,Activity类的onresume()方法中,会把decorView作为窗口添加到屏幕上。在onresume()方法中,Activity类会调用attach()方法将decorView附加到窗口上,然后调用show()方法显示窗口。attach()方法将decorView与窗口进行关联,使其成为窗口的一部分。show()方法则会将窗口显示在屏幕上。

4. 关键要点

  • activity窗口的创建过程始于Activity类的onCreate()方法。
  • setContentView()方法将布局文件解析成一个View对象,然后将其作为activity窗口的内容视图。
  • addView()方法将decorView添加到窗口中。
  • attach()方法将decorView附加到窗口上。
  • show()方法将窗口显示在屏幕上。
  • decorView包含了activity窗口的所有内容,包括标题栏、菜单栏、内容视图等。
  • onresume()方法中会把decorView作为窗口添加到屏幕上。

5. 常见问题

  • 为什么setContentView()方法必须在addView()方法之前调用?

因为setContentView()方法将布局文件解析成一个View对象,然后将其作为activity窗口的内容视图。addView()方法将decorView添加到窗口中,使其成为窗口的内容视图。如果setContentView()方法在addView()方法之后调用,那么decorView将不会包含内容视图,这将导致activity窗口显示空白。

  • 为什么attach()方法必须在show()方法之前调用?

因为attach()方法将decorView附加到窗口上,使其成为窗口的一部分。show()方法则会将窗口显示在屏幕上。如果attach()方法在show()方法之后调用,那么decorView将不会附加到窗口上,这将导致窗口无法显示。

  • 为什么onresume()方法中会把decorView作为窗口添加到屏幕上?

因为onresume()方法是activity恢复时调用的方法。在activity恢复时,需要将窗口添加到屏幕上,以便用户可以与activity交互。