简述DecorView什么时候被WindowManager添加到Window中 ?

DecorView 是 Android 中的顶级视图容器,作为应用窗口的最外层视图,它包含了窗口的标题栏、内容区域、状态栏等。在 Android 中,DecorView 是由 WindowManager 添加到窗口中的,具体的添加时机主要与 Activity 的生命周期以及视图的初始化流程有关。

DecorView 添加到 Window 中的时机

DecorView 的添加流程大致如下:

  1. Activity 启动阶段
    • Activity 的生命周期方法 onCreate() 被调用时,Activity 会创建一个 PhoneWindow 实例(默认情况下)。PhoneWindowWindow 的实现类,负责管理窗口视图。
    • setContentView() 方法中,PhoneWindow 会创建一个包含装饰样式的 DecorView,并将实际的内容视图添加到 DecorView 中的内容区域。
  2. WindowManager 添加 DecorView
    • WindowManager 是负责管理窗口的服务类。DecorView 作为窗口的顶级视图,在 Activity 的生命周期方法 onResume() 后期被添加到 WindowManager 中。
    • WindowManager 通过 addView() 方法将 DecorView 添加到当前窗口中,并显示在屏幕上。
    • 具体来说,ActivityThread 中会调用 WindowManagerGlobaladdView() 方法,将 DecorView 添加到 WindowManager 中。
  3. 首帧渲染
    • DecorView 被添加到 WindowManager 后,Android 系统会请求一次布局、测量和绘制,生成首帧渲染,使 Activity 的界面可见。
    • 系统的 Choreographer 会调度渲染流程,保证窗口在渲染准备好时显示在屏幕上。

总结

DecorView 的添加时机是在 ActivityonResume() 之后,这个过程由 WindowManager 负责,通过 addView() 方法将 DecorView 添加到窗口中。这样,DecorView 就可以管理其包含的内容视图和其他 UI 元素,最终呈现在用户的屏幕上。这个流程确保了 Activity 的界面在生命周期合适的阶段完成初始化,并显示给用户。

发表评论

后才能评论