android12 displayArea学习

news2024/12/23 16:21:51

一:数据结构分析

1:android 12 WindowContainer 的类继承关系如下

下图为 WindowContainer 简要的对象图。

 下图是 Aosp默认的display层次结构对象图。

Aosp定义的feature有如下

FEATURE_ROOT = 0;
FEATURE_DEFAULT_TASK_CONTAINER = 1;
FEATURE_WINDOW_TOKENS = 2;
FEATURE_ONE_HANDED = 3;
FEATURE_WINDOWED_MAGNIFICATION = 4;
FEATURE_FULLSCREEN_MAGNIFICATION = 5;
FEATURE_HIDE_DISPLAY_CUTOUT = 6;
FEATURE_IME_PLACEHOLDER = 7;
FEATURE_ONE_HANDED_BACKGROUND_PANEL = 8;

默认的FEATURE ID取值范围为 0~10000;vendor部分则是从10001~20000;RUNTIME_TASK_CONTAINER则是从20001 ~ maxInt;

二:流程分析

一:displayArea层次结构初始化流程

每一个displayContent下,有三种不同的displayArea

        1):对应具体feature的displayArea

        2):叶节点DisplayArea

        3):具体的widowToken和WindowState

对于这三种不同的displayArea,也分别有不同的创建时机

1:添加 Feature 规则

        对应具体Feature的DisplayArea,先是在DisplayAreaPolicy.Provider 根据window type的feature规则创建对应的feature层次关系

2:基于 Feature 规则创建 pendingArea

        第一步时,先创建root这一层的pendingArea

        第二步,根据先前设置的feature数量,遍历所有Layer,根据具体规则创建每一层的pendingArea。

        第三步,遍历所有layer,在后面添加一个用于叶节点的pendingArea。

3:从root节点遍历所有子节点创建 DisplayArea

        设置root节点为DisplayContent,同时从root节点开始,遍历所有子节点,创建DisplayArea,同时也创建对应的DisplayArea的surface。

到这一步,DisplayArea的层次结构就创建完成了。在这个结构中,还没有具体的窗口和activity。

二:activity的创建流程

         上图所示流程为冷启动activity的场景,在ATMS的视角下,会完成activityRecord和Task的创建,并把Task放到taskDisplayArea下面,把activityRecord放到Task下面。

         上图为activity启动的第二部分,向WMS中addWindow。这一步中会从DisplayContent中查到前一步到创建的ActivityRecord,并以此为参数创建WindowState,再把新创建的WindowState放到ActivityRecord中。

        第三部分则是activity向WMS发起relayout的请求。这一部分主要是surface相关的操作,这里不深入。

三:addView窗口创建流程

 上图为单独addView添加窗口的流程。

        第一步是先根据应用要求找到对应的 DisplayContent,再创建一个 WindowToken,根据window type找到初始化时创建的对应叶节点,把自己做为子节点挂上去。

        再以前面的 WindowToken 为参数创建对应的 WindowState,再把新创建的WindowState放到WindowToken 中。

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

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

相关文章

DNS服务器 - 理论

DNS服务器1. 概念2. DNS域名结构3. 域名的分级4. 域名服务器5. 域名解析过程5.1 递归查询与迭代查询5.2 解析流程1. 迭代查询2. 递归查询6. 高速缓存:7. 加上主机缓存后的DNS解析流程8. 常见的域名解析记录9. DNS正向解析和反向解析1. 概念 DNS服务器(D…

C++指针与其它复合类型

目录 前言: 1.指针与字符串 1.1cout接收char类型的地址的反应 1.2字符串字面值 1.3字符串备份 2.使用new创建动态结构 3.使用new和delete搭配存储键盘输入的字符串 前言: 指针我们已经知道如何使用了,也知道指针和数组配合起来使用&am…

DHCP及中继(UOS)

DHCP服务器 中继器 客户端 服务器 安装DHCP apt install isc-dhcp-server -y 编辑配置文件 vim /etc/dhcp/dhcpd.conf 重启服务 systemctl restart isc-dhcp-server 配置监听网卡 vim /etc/default/isc-dhcp-server 中继器 安装dhcp yum install dhcp -y nmtui 修改…

【LeetCode每日一题: 1042. 不邻接植花 | 图论 | 染色问题】

🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎 🍎座右…

Qt中调用C#制作的com组件

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 这里记录一下在 Qt 64位程序中调用 C# 制作的 com 组件的流程,方便后期自己回顾。 1. 了解 TLB 格式 拿到的依赖库最…

hbase进阶操作——读流程与写流程介绍

系列文章目录 centos7虚拟机下hbase的使用案例讲解 文章目录 系列文章目录 一、hbase架构原理 1.1、StoreFile 1.2、MemStore 1.3、WAL 二、hbase的写流程 2.1、写流程的流程图 2.2、写流程的流程图说明 三、hbase读流程 3.1、读流程的流程图 3.2、读流程的流程图解…

C/C++|物联网开发入门+项目实战|指针|嵌入式C语言高级|C语言内存空间的使用-学习笔记(9)

文章目录2-3 : C语言内存空间的使用指针概述示例:指针修饰符指针运算符示例示例1多级指针例子省略argc(个数)的常用写法:参考: 麦子学院-嵌入式C语言高级-内存空间2-3 : C语言内存空间的使用 指针概述 内存类型资源地…

CPU工作原理

CPU(中央处理器)是计算机中的重要组件,它负责执行计算机程序中的指令。在了解CPU的工作原理之前,我们需要先了解一些基本概念。 指令和指令集 指令是计算机程序中的基本单位,它指示计算机执行某个操作。指令集是一组…

我在“Now In Android”中学到的 9 件事

我在“Now In Android”中学到的 9 件事 Now in Android是一款功能齐全的 Android 应用程序,完全使用 Kotlin 和 Jetpack Compose 构建。它遵循 Android 设计和开发最佳实践,旨在为开发人员提供有用的参考。 https://github.com/android/nowinandroid UI…

淘宝悄悄内测“店号一体”的新模式

4月17日消息,淘宝近日已开始小规模测试“店号一体”新模式。新模式下,淘宝店铺将与逛逛、直播等账号完全打通;此前针对达人及内容型商家的新店铺模式“视频内容店”也同步升级。 内测商家透露,目前在淘宝发布的图文、短视频、直播…

腾讯学长分享的这份Java面试八股文手册,让我GitHub下载量破百万!!!

一些不满现状,被外界的“高薪”“好福利”吸引的人,一般就在这时候毅然决然地跳槽了。 跳槽是为了寻求更好的发展,但在跳槽前我们也不能确定下家就是更好的归宿,这就更加需要我们审慎地去对待,不能盲目跳槽。 其次&a…

知识图谱专栏简介:数据增强,智能标注,文本信息抽取(实体关系事件抽取)、知识融合算法方案、知识推理、模型优化、模型压缩技术等

知识图谱专栏简介:数据增强,智能标注,文本信息抽取(实体关系事件抽取)、知识融合算法方案、知识推理、模型优化、模型压缩技术等 专栏链接:NLP知识图谱相关技术业务落地方案和码源 NLP知识图谱相关技术业…

程序员跳槽薪水涨了一倍,谈谈java工程师找新工作的八大技巧

大家好,这几天发生了一些事情,我找到了一份新工作,明天是第一天上班。我想先谈一下我的新工作待遇,因为我觉得相对来说还算比较满意。接下来我想谈一下我的个人经历,从毕业到现在的工作经历。第三个话题是我最近半个月…

k-d Tree算法

1.概述 本文介绍一种用于高维空间中的快速最近邻和近似最近邻查找技术——Kd- Tree(Kd树)。Kd-Tree,即K-dimensional tree,是一种高维索引树形数据结构,常用于在大规模的高维数据空间进行最近邻查找(Nearest Neighbor)和近似最近邻查找(Appro…

Java工程行业管理系统源码-专业的工程管理软件-提供一站式服务

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示1…

反向代理自建教程:你懂的

一、为什么需要自建反代 OpenAI提供了两种访问方式,一种是直接在ChatGPT网页端使用的Access Token方式,这种方式可以免费使用GPT-3.5模型,只需要登录即可使用。但缺点是不稳定,且无法扩展。另一种是使用API,注册用户可…

Nacos 客户端服务注册源码分析-篇三

Nacos 客户端服务注册源码分析-篇三 版本说明: 源码版本 nacos-1.4.2 Nacos 的核心功能点 服务注册: Nacos Client 会通过发送 REST 请求的方式向 Nacos Server 注册自己的服务,提供自身的元数据,比如 ip 地址以及端口等信息。Na…

Sentinal持久化到Nacos

Springboot应用整合Sentinel实现限流、熔断、降级笔记https://blog.csdn.net/chenjian723122704/article/details/130101875 Sentinel版本 1.8.6 Nacos版本 2.2.0 下载Sentinel源码 Sentinel1.8.6:https://github.com/alibaba/Sentinel/releases/tag/1.8.6 拷贝源…

AtCoder Beginner Contest 295——F - substr = S

蒟蒻来讲题,还望大家喜。若哪有问题,大家尽可提! Hello, 大家好哇!本初中生蒟蒻讲解一下AtCoder Beginner Contest 295这场比赛的F题! F - substr S 原题 Problem Statement You are given a string SSS consisti…

双塔模型:微软DSSM模型浅析

1.背景 DSSM是Deep Structured Semantic Model (深层结构语义模型) 的缩写,即我们通常说的基于深度网络的语义模型,其核心思想是将query和doc映射到到共同维度的语义空间中,通过最大化query和doc语义向量之间的余弦相似度,从而训…