当前位置: 首页 > news >正文

Android AMS

Android进阶:一口气读完《Android进阶解密》 - 掘金

Android AMS(Activity Manager Service)实现的功能

**管理应用程序的生命周期:**启动、停止、暂停、恢复和销毁应用程序。
**控制应用程序的启动顺序:**确保应用程序以正确的顺序启动,以避免冲突。
**维护应用程序状态:**跟踪应用程序的当前状态(如正在运行、已暂停等)。
**管理应用程序权限:**授予和撤销应用程序的权限。
**处理应用程序间通信:**允许应用程序通过 Binder IPC 机制进行通信。
**提供应用程序信息:**提供有关已安装应用程序的详细信息,例如其名称、版本和权限。
**优化内存使用:**管理应用程序的内存使用,以防止内存泄漏和系统崩溃。
**处理低内存情况:**当系统内存不足时,终止低优先级的应用程序以释放内存。
**提供调试和诊断工具:**允许开发人员调试和诊断应用程序问题。
AMS 交互的模块

**WindowManagerService (WMS):**管理应用程序窗口。
**PackageManagerService (PMS):**管理已安装的应用程序。
**ContentProviderManagerService (CPMS):**管理内容提供程序。
**InputManagerService (IMS):**管理输入事件。
**NotificationManagerService (NMS):**管理通知。
**AlarmManagerService (AMS):**管理闹钟。
**JobSchedulerService (JSS):**管理作业调度。
**ConnectivityManagerService (CMS):**管理网络连接。
**BatteryManagerService (BMS):**管理电池信息。
**SensorManagerService (SMS):**管理传感器。
**LocationManagerService (LMS):**管理位置信息。


WindowManagerService与AMS有哪些交互,实现了哪些业务逻辑?
WindowManagerService (WMS) 与 Activity Manager Service (AMS) 的交互

WMS 和 AMS 密切交互,以管理 Android 设备上的应用程序窗口。以下是它们交互的一些关键方面:

**AMS 通知 WMS 创建窗口:**当 AMS 启动一个应用程序时,它会通知 WMS 创建一个窗口来显示应用程序的 UI。WMS 负责管理窗口的生命周期,包括创建、显示、隐藏和销毁窗口。

**WMS 通知 AMS 窗口状态更改:**当 WMS 的窗口状态发生更改时(例如,窗口获得或失去焦点),它会通知 AMS。这使 AMS 能够相应地更新应用程序的状态(例如,暂停或恢复应用程序)。

**AMS 控制窗口的显示顺序:**AMS 负责控制窗口的显示顺序。它决定哪些窗口应该在前台显示,哪些窗口应该在后台显示。WMS 根据 AMS 的指示管理窗口的堆叠顺序。

**WMS 执行 AMS 的窗口操作:**AMS 可以向 WMS 发出命令来执行各种窗口操作,例如: * 创建窗口 * 销毁窗口 * 移动窗口 * 调整窗口大小 * 更改窗口属性

**WMS 提供窗口信息:**WMS 可以向 AMS 提供有关窗口的信息,例如: * 窗口的当前状态 * 窗口的尺寸和位置 * 窗口的透明度 * 窗口的输入焦点

实现的业务逻辑

WMS 和 AMS 之间的交互实现了以下业务逻辑:

**应用程序窗口管理:**WMS 创建、管理和销毁应用程序窗口,确保应用程序 UI 正确显示。
**窗口状态跟踪:**WMS 跟踪窗口的状态,并通知 AMS 任何状态更改。这使 AMS 能够相应地更新应用程序的状态。
**窗口显示控制:**AMS 控制窗口的显示顺序,确保前台应用程序的窗口始终可见。
**窗口操作执行:**WMS 执行 AMS 发出的窗口操作命令,允许 AMS 动态控制应用程序窗口。
**窗口信息提供:**WMS 向 AMS 提供有关窗口的信息,使 AMS 能够做出明智的决策并管理应用程序窗口。
总之,WMS 和 AMS 之间的交互对于管理 Android 设备上的应用程序窗口至关重要。它使 AMS 能够控制窗口的显示和行为,而 WMS 负责执行这些操作并提供有关窗口状态的信息

窗口不直接在 Activity 中创建和管理,而是使用 WindowManagerService (WMS) 进行管理的主要原因如下:

1. 解耦应用程序和窗口系统: WMS 将应用程序与底层窗口系统解耦。这允许应用程序专注于其业务逻辑,而无需担心窗口管理的复杂性。

2. 集中式窗口管理: WMS 提供了一个集中式机制来管理所有应用程序窗口。这确保了窗口的一致性、堆叠顺序和资源分配。

3. 跨进程边界: WMS 作为一个独立的系统服务运行,与应用程序进程隔离。这允许它管理来自不同应用程序的窗口,而无需担心进程崩溃或安全问题。

4. 性能优化: WMS 针对窗口管理进行了优化,可以高效地创建、销毁和管理窗口。它还处理窗口动画和过渡,以提供流畅的用户体验。

5. 安全性: WMS 充当应用程序和窗口系统之间的安全边界。它可以验证应用程序对窗口操作的请求,并防止恶意应用程序访问或修改其他应用程序的窗口。

6. 兼容性: WMS 提供了一个跨不同 Android 设备的标准化接口来管理窗口。这确保了应用程序在各种设备上的一致行为。

7. 可扩展性: WMS 是一个可扩展的系统,允许添加新功能和特性,例如多窗口模式、画中画模式和窗口动画。

8. 调试和诊断: WMS 提供了调试和诊断工具,允许开发人员识别和解决窗口管理问题。

总之,使用 WMS 来管理窗口而不是在 Activity 中直接创建和管理窗口提供了许多好处,包括解耦、集中管理、性能优化、安全性、兼容性、可扩展性和调试能力。

AMS和WMS之间定义了哪些通信接口
AMS 和 WMS 之间定义了以下通信接口:

1. IWindow

允许 WMS 与应用程序窗口进行交互。
提供创建、销毁、移动、调整大小和获取窗口属性等方法。
2. IWindowManager

允许 AMS 与 WMS 进行交互。
提供创建、销毁、移动、调整大小和获取窗口属性等方法。
还提供控制窗口显示顺序、获取窗口列表和设置窗口标志等方法。
3. IAppOpsService

允许 WMS 查询和修改应用程序操作权限。
例如,WMS 可以检查应用程序是否具有在其他应用程序之上绘制窗口的权限。
4. IPermissionController

允许 WMS 查询和修改应用程序权限。
例如,WMS 可以检查应用程序是否具有访问特定窗口属性的权限。
5. IActivityManager

允许 WMS 与 AMS 进行交互。
提供启动、停止、获取和修改应用程序活动状态的方法。
6. IActivityTaskManager

允许 WMS 与 AMS 进行交互。
提供创建、销毁、移动和调整任务大小的方法。
7. IDisplayManager

允许 WMS 与 DisplayManagerService (DMS) 进行交互。
提供获取和修改显示属性的方法。
8. IInputManager

允许 WMS 与 InputManagerService (IMS) 进行交互。
提供处理输入事件和管理输入设备的方法。
9. IStatusBarManager

允许 WMS 与 StatusBarManagerService (SBS) 进行交互。
提供控制状态栏可见性和行为的方法。
10. INotificationManager

允许 WMS 与 NotificationManagerService (NS) 进行交互。
提供控制通知可见性和行为的方法。
这些接口通过 Binder IPC 机制进行通信。AMS 和 WMS 使用这些接口来交换有关窗口、应用程序和设备状态的信息,并协调窗口管理操作。

相关文章:

Android AMS

Android进阶:一口气读完《Android进阶解密》 - 掘金 Android AMS(Activity Manager Service)实现的功能 **管理应用程序的生命周期:**启动、停止、暂停、恢复和销毁应用程序。 **控制应用程序的启动顺序:**确保应用程…...

2024暑期实习八股笔记

文章目录 自我介绍MySQL索引索引种类、B树聚簇索引、非聚簇索引联合索引、最左前缀匹配原则索引下推索引失效索引优化 日志、缓冲池redo log(重做日志)刷盘时机日志文件组 bin log(归档日志)记录格式写入机制 两阶段提交undo log&…...

EDGE 音乐生成的可编辑舞蹈 论文学习笔记

本文不是很严谨,供学习参考,随时更新 EDGE: Editable Dance Generation From Music 音乐生成的可编辑舞蹈 GitHub - Stanford-TML/EDGE: Official PyTorch Implementation of EDGE (CVPR 2023) 1. 我们引入了一种基于扩散的舞蹈生成方法,该…...

laravel 模型多对多,应用

laravel 模型多对多,应用,试卷 跟 区域 多对多关系 一个试卷可以发放到a b c 区域 创建试卷表 CREATE TABLE exams (exam_id int(11) unsigned NOT NULL AUTO_INCREMENT,exam_title varchar(100) NOT NULL DEFAULT COMMENT 标题,created_time int(11…...

嵌入式学习35-网络通信UDP聊天及TCP

题目:基于UDP实现直播间聊天的功能 需求: 软件划分为用户客户端和主播服务端两个软件client.c和server.c 用户客户端负责: 1.接收用户的昵称 2.接收用户输入的信息,能够将信息发送给服务端 3.接收服…...

Python:if条件判断语句

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 内容简介 比较运算符和关系运算符&#xff1a; 本文将介绍Python中常见的比较运算符&#xff0c;如 &#xff08;等于&#xff09;、! 和 <&…...

git 命令怎么回退到某个特定的 commit 并将其推送到远程仓库?

问题 不小心把提交的名称写错提交上远程仓库了&#xff0c;这里应该是 【029】的&#xff0c;这个时候我们想回到【028】这一个提交记录&#xff0c;然后再重新提交【029】到远程仓库&#xff0c;该怎么处理。 解决 1、首先我们找到【028】这条记录的提交 hash&#xff0c;右…...

Python中如何操作数据库?

Python中如何操作数据库&#xff1f; ​​​​​ 在Python中操作数据库通常涉及到使用数据库驱动程序或ORM&#xff08;对象关系映射&#xff09;库。下面是一些常见的步骤和工具&#xff0c;用于在Python中操作数据库&#xff1a; 1. 选择数据库和驱动程序 首先&#xff0c…...

【智能算法】蜻蜓算法(DA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2016年&#xff0c;Mirjalili受到蜻蜓静态和动态集群行为启发&#xff0c;提出了蜻蜓算法(Dragonfly algorithm, DA)。 2.算法原理 2.1算法思想 蜻蜓集群有两种行为目的&#xff1a;狩猎&#xf…...

用A*算法求解八数码问题

用A*算法求解八数码问题 实现两种启发函数实现A*算法测试 实现两种启发函数 采取两种策略实现启发函数&#xff1a; 策略1&#xff1a;不在目标位置的数字个数策略2&#xff1a;曼哈顿距离&#xff08;将数字直接移动到对应位置的步数总数&#xff09; # 策略1: 不在目标位置…...

分布式之Ribbon使用以及原理

Ribbon使用以及原理 1、负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请求会到我们的的nginx上去&#xff0c;nginx作为反向代理&#xff0c;然后路由给后端的服务器&#xff0c;由于负载均衡算法是nginx提供的&#xff0c;而nginx是部署到服务器端的&#xff0c;所…...

android JNI float *转MutableList

data class Test(var data:MutableList<Float> )JNIEXPORT void JNICALL Java_NativeUtils_assignFloatArrayToHealth(JNIEnv *env, jclass clazz, jobject obj, jfloatArray cData) {jclass objClass env->GetObjectClass(obj);// 获取 Test类中的 data 属性jfieldI…...

chatgpt与人类有何不同?

ChatGPT和人类之间存在多个显著的差异。 首先&#xff0c;ChatGPT是一种基于人工智能技术的计算机程序&#xff0c;通过机器学习和自然语言处理等技术&#xff0c;从大量的数据中获取知识并生成语言输出。它主要依赖于算法和数据进行工作&#xff0c;能够迅速处理和检索信息&a…...

论文笔记:Evaluating the Performance of Large Language Models on GAOKAO Benchmark

1 论文思路 采用zero-shot prompting的方式&#xff0c;将试题转化为ChatGPT的输入 对于数学题&#xff0c;将公式转化为latex输入 主观题由专业教师打分 2 数据 2010~2022年&#xff0c;一共13年间的全国A卷和全国B卷 3 结论 3.1 不同模型的zeroshot 高考总分 3.2 各科主…...

MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

使用 ORDER BY 进行排序 使用 ORDER BY 语句按升序或降序对结果进行排序。 ORDER BY 关键字默认按升序排序。要按降序排序结果&#xff0c;使用 DESC 关键字。 示例按名称按字母顺序排序结果&#xff1a; import mysql.connectormydb mysql.connector.connect(host"l…...

数据结构入门(3)2.链表接口实现

目录 前言 头文件 动态申请一个结点 单链表打印 单链表尾插 单链表的头插 单链表的尾删 单链表头删 单链表查找 单链表在pos位置之后插入x 单链表删除pos位置之后的值 在pos的前面插入 删除pos位置 销毁顺序表 前言 本文将介绍链表常见的功能的实现 头文件 #…...

vscode中解决驱动编写的时候static int __init chrdev_init()报错的问题

目录 错误出错原因解决方法 错误 在入口函数上&#xff0c;出现 expected a ; 这样的提示 出错原因 缺少了 __KERNEL __ 宏定义 解决方法 补上__KERNEL__宏定义 具体做法&#xff1a;在vscode中按下ctrlshiftp &#xff0c;输入&#xff1a;C/C:Edit Configurations&#xff0…...

fastgpt本地详细部署以及配置

目录 一、Docker部署1、docker安装2、docker启动3、添加用户到 docker 组:4、验证 Docker 安装:二、one_api 本地部署1、linux系统部署2、windows系统部署三、向量模型部署(m3e)四、chatglm2模型本地部署五、fastgpt模型本地部署1、下载配置文件2、文件配置--docker-compos…...

【故障分类】基于注意力机制的卷积神经网络结合双向长短记忆神经网络CNN-BiLSTM-attention实现数据分类附matlab代码

摘要&#xff1a; ntion机制加权 4. 加权后的特征进行分类 需求分析 本文旨在实现一个通用的数据分类模型&#xff0c;可应用于不同领域的数据分类任务。 设计方案 设计一个CNN网络结构&#xff0c;提取输入数据的特征 将特征序列输入到BiLSTM网络&#xff0c;进行时序建模…...

vue接入百度地图获取经纬度

通过城市名称和城市中心经纬度来获取当前所在地图&#xff0c;当前经纬度中心获取可以通过后端获取 静态文件包&#xff0c;替换baidu.html中的ak值&#xff0c;ak值通过百度地图官方网站申请 申请&#xff1a;百度地图API申请步骤 - 知乎 代码示例文件&#xff1a; 链接&a…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...