日更挑战-Android Window、Activity、DecorView和ViewRoot

什么是Android Window、Activity、DecorView和ViewRoot

image.png
  • Android Window
    是上图的PhoneWindow层次,是视图的承载器

    • 视图承载器:内部持有一个DecorView(view的跟布局)
      • DecorView(布局显示):是FrameLayout的子类,是Android的视图树的跟节点

        • 源码

          
              
              
          
              
          
                  
              
          
              
          
          
        • 结构: 包含一个竖直方向的LinearLayout,内容为:TitleView和ContentViews

          1. ViewStub:

            • 延迟加载的根据Theme设置ActionBar视图 ,有的布局没有
          2. TitleView:

            • 标题栏根据Theme设置,有的布局没有
          3. ContentViews:

            • 加载Activity中设置的布局R.layout.activity_main

            • 获取加载的布局的方式:

              ViewGroup content = (ViewGroup)findViewById(android.R.id.content);
              ViewGroup rootView = (ViewGroup) content.getChildAt(0);
              
      • ViewRoot (布局操作):在安卓代码中只的是ViewRootImpl类, View的绘制 以及 事件分发 等交互 都是通过它来执行或传递的

        • View的绘制中的作用: 三大流程(测量(measure),布局(layout),绘制(draw))
        • 事件分发中的作用:
        • 其他特定:
          1. 连接WindowManagerService和DecorView的纽带
          2. 实现了ViewParent接口,这让它可以作为View的名义上的父视图
          3. 继承了Handler类,可以接收事件并分发 , 所有触屏事件、按键事件、界面刷新等事件都是通过ViewRoot进行分发的
  • Activity

    并不负责视图控制,它只是控制生命周期和处理事件

    • 控制生命周期
    • 处理事件 :
      1. 安卓事件分发机制是从Activity中开始的。(较真的话那就是从屏幕感知获取的了)

你可能感兴趣的:(日更挑战-Android Window、Activity、DecorView和ViewRoot)