美文网首页
日更挑战-Android Window、Activity、Dec

日更挑战-Android Window、Activity、Dec

作者: 愿你我皆是黑马 | 来源:发表于2021-06-18 22:49 被阅读0次

    什么是Android Window、Activity、DecorView和ViewRoot

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

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

          • 源码

            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:fitsSystemWindows="true"
                android:orientation="vertical">
                <!-- Popout bar for action modes -->
                <ViewStub
                    android:id="@+id/action_mode_bar_stub"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inflatedId="@+id/action_mode_bar"
                    android:layout="@layout/action_mode_bar"
                    android:theme="?attr/actionBarTheme" />
            
                <FrameLayout
                    style="?android:attr/windowTitleBackgroundStyle"
                    android:layout_width="match_parent"
                    android:layout_height="?android:attr/windowTitleSize">
            
                    <TextView
                        android:id="@android:id/title"
                        style="?android:attr/windowTitleStyle"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="@null"
                        android:fadingEdge="horizontal"
                        android:gravity="center_vertical" />
                </FrameLayout>
            
                <FrameLayout
                    android:id="@android:id/content"
                    android:layout_width="match_parent"
                    android:layout_height="0dip"
                    android:layout_weight="1"
                    android:foreground="?android:attr/windowContentOverlay"
                    android:foregroundGravity="fill_horizontal|top" />
            </LinearLayout>
            
          • 结构: 包含一个竖直方向的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、Dec

          本文链接:https://www.haomeiwen.com/subject/kanlyltx.html