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

参考回答

DecorView 是在 Activity 启动并且窗口被创建时,由 WindowManager 自动添加到 Window 中的。当 Activity 被创建时,系统会为其分配一个窗口,并将 DecorView 作为该窗口的根视图,确保所有的 UI 元素(包括内容视图和系统装饰元素)都被正确地显示。

具体来说,当 Activity 调用 setContentView() 方法时,DecorView 会将应用的视图添加到窗口的内容区域,并且 WindowManager 会将这个 DecorView 视图层次结构加入到窗口中。

详细讲解与拓展

  1. Window 和 DecorView 的关系
    • Activity 启动的过程中,Window 会被创建。此时,Window 是一个容器,负责管理显示在屏幕上的所有视图。
    • DecorViewActivity 窗口中的最外层视图容器,包含了标题栏、内容区域、状态栏等系统 UI 元素。DecorView 会被添加到 Window 中作为窗口的根视图。
  2. 添加流程
    • Activity 被启动时,系统会通过 Window 创建一个新的 DecorView
    • 之后,WindowManager 会将 DecorView 添加到窗口中,作为活动窗口的视图容器。
    • Activity 通过调用 setContentView() 来设置应用的界面内容,这个界面内容会被嵌入到 DecorView 中的内容区域(FrameLayout)。
  3. 窗口的创建过程
    • Window 创建:当 Activity 被创建时,Window 会被实例化,通常是 PhoneWindow 类,它负责管理 DecorView 和其他视图。
    • DecorView 创建与添加PhoneWindow 会创建一个 DecorView,并将其设置为窗口的根视图。
    • 设置内容视图:调用 setContentView() 后,Activity 的 UI 元素会被添加到 DecorView 中,通常是通过 FrameLayout 承载应用的界面内容。
  4. 示例代码
    • Activity 启动时,系统自动为其创建 WindowDecorView
      public class MainActivity extends Activity {
       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main); // 内容视图被添加到 DecorView 中
       }
      }
      
      Java
    • WindowManager 会自动将 DecorView 添加到 Window 中,确保显示在屏幕上。
  5. 修改 DecorView
    • 开发者也可以通过 WindowActivity 的方法修改或获取 DecorView,例如:
      View decorView = getWindow().getDecorView();
      decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN); // 例如隐藏状态栏
      
      Java

总结:

DecorView 会在 Activity 被创建时,由 WindowManager 自动添加到 Window 中。DecorView 作为窗口的根视图容器,承载了 Activity 的界面布局和系统 UI 元素。开发者通常通过 setContentView() 来设置界面内容,而 WindowManager 会确保 DecorView 被正确地添加到窗口中并显示。

发表评论

后才能评论