setContentView 流程

setContentView 流程

  1. Activity -> setContentView
    开发者设置入口
  2. PhoneWindow -> setContentView
    mWindow 在 attach 时初始化为 PhoneWindow,同时PhoneWindow也是Window唯一的实现类
  3. PhoneWindow -> installDecor
    这一步的作用是 初始化DecorView, 把DecorView填充到 mContentParent;
  • generateDecor 用于生成DecorView
  • generateLayout 用于设置应用系统属性和特别的布局
  • DecorView - > onResourcesLoaded 方法就是把上一步生成的layout添加到DecorView中
  1. 上一步就是为了获取 mContentParent, 回到 setContentView 中,通过inflate方法把 layoutResId 添加到 mContentParent

如果是使用 AppCompatActivity, 还会多一步设置 mSubDecor。 它是在DecorView 上又加了一层,主要用于设置主题

UI 绘制流程

参考 onCreate和onResume为什么不能直接获取宽高.md

  1. ActivityThread -> handleLaunchActivity -> performLaunchActivity
    performLaunchActivity 中主要是做了3件事情:
  • 创建了Activity对象
  • 调用attach, 初始化 WindowWindowManager
  • 调用了onCreate方法。
  • 上面的 setContentView
  1. ActivityThread -> handleResumeActivity
  • 执行 Activity 的 onResume 方法
  • 执行 wm.addView(decor, l); , 把之前的 DecorView 添加到视图中,开始执行布局的绘制流程。
  1. 最后会走到布局管理器中ViewRootImplperformTraversals方法中
  private void performTraversals() {
     ……
     // 【关键点1】分发mAttachInfo
     host.dispatchAttachedToWindow(mAttachInfo, 0);
     ……
    
   //【关键点2】开始测量
   performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);
   ……
   //【关键点3】开始布局
   performLayout(lp, mWidth, mHeight);
   ……
   // 【关键点4】开始绘制
   performDraw();
   ……
   }

此时UI绘制流程基本结束,页面也展示出来了

相关推荐

  1. setContentView 流程

    2024-07-15 22:36:04       23 阅读
  2. 业务流程

    2024-07-15 22:36:04       50 阅读
  3. FastGpt流程

    2024-07-15 22:36:04       33 阅读
  4. GitFlow流程

    2024-07-15 22:36:04       26 阅读
  5. mysql-增量备份流程详细流程

    2024-07-15 22:36:04       31 阅读
  6. Flask 的执行流程

    2024-07-15 22:36:04       53 阅读
  7. Narayana 事务 begin 流程

    2024-07-15 22:36:04       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 22:36:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 22:36:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 22:36:04       58 阅读
  4. Python语言-面向对象

    2024-07-15 22:36:04       69 阅读

热门阅读

  1. HTTP——GET请求

    2024-07-15 22:36:04       23 阅读
  2. linux系统php开机自启动 phpfpm

    2024-07-15 22:36:04       17 阅读
  3. Android12 OTA全包升级清除用户数据

    2024-07-15 22:36:04       20 阅读
  4. 写在2024美洲杯之后

    2024-07-15 22:36:04       21 阅读
  5. AI艺术革命:使用神经网络生成创新艺术作品

    2024-07-15 22:36:04       19 阅读
  6. JUC练习——线程安全的计数器

    2024-07-15 22:36:04       20 阅读
  7. vue3~

    vue3~

    2024-07-15 22:36:04      18 阅读
  8. QSqlQuery::value: not positioned on a valid record

    2024-07-15 22:36:04       22 阅读
  9. 基于金碟云星空实现硬件ECN校验

    2024-07-15 22:36:04       18 阅读
  10. ObjectiveC 内存管理

    2024-07-15 22:36:04       21 阅读