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

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...