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】分发mAttachInfohost.dispatchAttachedToWindow(mAttachInfo, 0);……//【关键点2】开始测量performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);……//【关键点3】开始布局performLayout(lp, mWidth, mHeight);……// 【关键点4】开始绘制performDraw();……}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode704.二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: 9 出现…

JAVASE 重点基础语法 - JAVA基础知识点复习(1)

目录 一,关键字 定义:被JAVA语言赋予了特殊的含义,来用来做专门用途的单词 关键字分类: 1,用于定义数据类型的关键字 2,用于定义流程控制的关键字 3,用于定义访问权限修饰符的关键字 4,用于定义类&am…

C++从入门到起飞之——缺省参数/函数重载/引用全方位剖析!

目录 1.缺省参数 2. 函数重载 3.引⽤ 3.1 引⽤的概念和定义 3.2 引⽤的特性 3.3 引⽤的使⽤ 3.4 const引⽤ 3.5 指针和引⽤的关系 4.完结散花 个人主页:秋风起,再归来~ C从入门到起飞 个人格言:悟已往之不谏…

MySQL学习笔记 下

MySQL学习笔记(需接上篇) 1. 通配符 用于替换字符串中的一个或多个字符;通配符常与LIKE关键字一起使用,用于搜索字段中的指定模式; 2. 别名 用于为表或表中的列提供临时名称; 别名用于为表或表中的字段…

【安装记录】:安装破解 ideaIU-2024.1.4

1、官网下载安装包: https://www.jetbrains.com/idea/download/?sectionwindows 2、按照下图操作: 然后,自定义重启即可 3、破解参考这篇文章:https://www.exception.site/article/1727

qt 自定义抽象类简单举例

在Qt中自定义一个抽象类通常涉及定义一个基类,该类包含至少一个纯虚函数,从而使其成为抽象类。以下是一个简单的例子,展示了如何创建一个自定义的抽象类及其派生类。 首先,我们定义一个名为Shape的抽象类,它有一个纯虚…

win10 A4000 下使用Xinference来进行大模型的推理测试

创建环境 conda remove --name xinference --all conda create --name xinference python3.10 conda activate xinference 安装: conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia pip install tiktoken sentence-transformer…

【QT】窗口MainWindow

目录 窗口的组成 菜单栏 图形化创建菜单栏 代码创建菜单栏 给菜单设置快捷键 添加子菜单 添加分割线 添加图标 创建menuBar的细节 工具栏 设置工具栏出现的初始位置(上下左右) 设置工具栏允许停靠的位置 设置不允许浮动 设置不允许移动…

提高使用安全,智慧校园在线用户功能概述

智慧校园系统融入了一个查看当前在线用户的功能,这一设计旨在为管理人员提供一个实时的窗口,洞悉校园平台的即时活跃情况,确保系统的高效运作与环境安全。通过这一功能,管理员能够一目了然地看到所有正活跃在平台上的用户群体&…

二叉树专题刷题

二叉树的层平均值 题目 637. 二叉树的层平均值 - 力扣(LeetCode) 解题思路 使用三个集合,sums集合存储每层的总和,count集合存储每层的节点数,averages存储每层的平均值。 这里要讲一下add方法和set方法的区别 ad…

windows运行库合集(windows必备运行库)

Windows运行库(Windows Runtime,简称WinRT)是微软为Windows 8及以上版本推出的一种新的应用程序框架,它采用了基于COM的API调用方式,并使用了新的应用程序打包和分发方式。 WinRT包含了大量的通用API,可以…

J026_统计投票人数

一、需求描述 统计投票人数 某个班级80名学生,现在需要组织秋游活动,班长提供了4个景点依次是(A、B、C、D),每个学生只能选择一个景点,请统计出最终哪个景点想去的人数最多。 二、代码实现 package com…

JS的隐式转换

1.什么是JS的隐式转换 JavaScript中的隐式转换是指在运行过程中,代码自动将一个数据类型转换为另一个数据类型,而无需显式地调用转换函数。 原因 JavaScript是弱类型语言,这意味着它不像Java,C一样的强类型语言有预先确定的类型…

离线安装pip包

文章目录 离线机器安装需要的python包 离线机器安装需要的python包 本机做一台和实际的生产机器相同环境的虚拟机 在本机环境下下载离线包 pip3 download gunicorn -d /usr/local/gunicorn-package -i https://pypi.tuna.tsinghua.edu.cn/simple 将gunicorn-package下的文件…

【088】基于SpringBoot+Vue实现高校就业管理系统

系统介绍 基于SpringBootVue实现的高校就业管理系统 课程设计 大作业必备 基于SpringBootVue实现高校就业管理系统采用前后端分离的架构方式,系统分为管理员、企业、辅导员、学生四种角色,实现了用户登录、学生注册、商家注册、首页统计、个人信息管理、…

动手学深度学习(Pytorch版)代码实践 -注意力机制-Transformer

68Transformer 1. PositionWiseFFN 基于位置的前馈网络 原理:这是一个应用于每个位置的前馈神经网络。它使用相同的多层感知机(MLP)对序列中的每个位置独立进行变换。作用:对输入序列的每个位置独立地进行非线性变换&#xff0c…

备份及恢复Sonarqube服务数据

基础数据: 源数据机ip:192.*.53 测试机ip:192.*.65 Sonarqube访问地址:http://192.*.65:9000/ 账户名:admin 密码:123456 数据库postgres: 版本:PostgreSQL 15.3 一、数据备份…

AI写歌词,为你的音乐之旅添彩

在追求音乐梦想的道路上,每一个音符都承载着我们的情感与故事。而精彩的歌词,更是让这些音符焕发出耀眼光芒的关键。如今,AI 写词的出现,为我们的音乐之旅增添了绚丽的色彩。 “妙笔生词智能写歌词软件(veve522&#…

JAVA自定义注释

interface 声明 package test; public interface InProgress { } InProgress public void calculateInterest(float amount, float rate) { } 带成员 public interface TODO {String value(); } InProgress //只有成员变量名有value时,值有给value赋值时可以这…

Spring Cloud Eureka

引入:远程调用时,url是写死的 String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 解决思路: 比如(医院,学校等)机构的电话号码发生变化,就需要通知各个使⽤…