activity 窗口添加过程剖析
2023-10-14 13:51:45
- 创建窗口
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交互。