简述DecorView什么时候被WindowManager添加到Window中 ?
DecorView
是 Android 中的顶级视图容器,作为应用窗口的最外层视图,它包含了窗口的标题栏、内容区域、状态栏等。在 Android 中,DecorView
是由 WindowManager
添加到窗口中的,具体的添加时机主要与 Activity 的生命周期以及视图的初始化流程有关。
DecorView 添加到 Window 中的时机
DecorView
的添加流程大致如下:
- Activity 启动阶段:
- 当
Activity
的生命周期方法onCreate()
被调用时,Activity
会创建一个PhoneWindow
实例(默认情况下)。PhoneWindow
是Window
的实现类,负责管理窗口视图。 - 在
setContentView()
方法中,PhoneWindow
会创建一个包含装饰样式的DecorView
,并将实际的内容视图添加到DecorView
中的内容区域。
- 当
- WindowManager 添加 DecorView:
WindowManager
是负责管理窗口的服务类。DecorView
作为窗口的顶级视图,在Activity
的生命周期方法onResume()
后期被添加到WindowManager
中。WindowManager
通过addView()
方法将DecorView
添加到当前窗口中,并显示在屏幕上。- 具体来说,
ActivityThread
中会调用WindowManagerGlobal
的addView()
方法,将DecorView
添加到WindowManager
中。
- 首帧渲染:
- 当
DecorView
被添加到WindowManager
后,Android 系统会请求一次布局、测量和绘制,生成首帧渲染,使Activity
的界面可见。 - 系统的
Choreographer
会调度渲染流程,保证窗口在渲染准备好时显示在屏幕上。
- 当
总结
DecorView
的添加时机是在 Activity
的 onResume()
之后,这个过程由 WindowManager
负责,通过 addView()
方法将 DecorView
添加到窗口中。这样,DecorView
就可以管理其包含的内容视图和其他 UI 元素,最终呈现在用户的屏幕上。这个流程确保了 Activity
的界面在生命周期合适的阶段完成初始化,并显示给用户。