当前位置: 首页 > 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…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...