Android Framework 之AMS

news2024/9/9 0:18:57

它管理了系统的四大组件:Activity、Service、ContentProvider、Broadcast。
它除了管理四大组件外,同时也负责管理和调度所有的进程
AMS相关目录结构
AMS代码主要在下面几个目录(AndroidQ上AMS相关部分功能移到了wm下):
frameworks/base/core/java/android/app/
frameworks/base/services/core/java/com/android/server/am/
frameworks/base/services/core/java/com/android/server/wm/

下面具体看下几个重要文件
frameworks/base/core/java/android/app/下:

Activity.java:所有Activity的父类。
ActivityManager.java:AMS的客户端,提供给用户可调用的api。
ActivityThread.java:应用进程的主线程类,一般即UI线程。
frameworks/base/services/core/java/com/android/server/am/下:

ActiveServices.java:控制service的启动、重启等。
ProcessRecord.java:记录每个进程的信息。
frameworks/base/services/core/java/com/android/server/wm/下:

ActivityRecord.java:activity对象信息的记录。
ActivityStack.java/ActivityStackSupervisor.java:管理activity生命周期及堆栈等。
TaskRecord.java:任务栈记录,管理一个任务的应用activity
ActivityTaskManagerService.java/ActivityTaskManagerInternal.java:管理activity的启动和调度。

在这里插入图片描述
为什么需要使用 ActivityManagerProxy 的代理模式呢 ,AMS 是在system_server
进程中的,其他进程要使用AMS就要在本进程中建立一个代理,同时他们之间又是通过binder通讯的,binder通讯本身采用的就是代理模式。
1.1 而在Android10.0中 有个ATMS的启动

ActivityTaskManagerService是Android 10新引入的变化,也是系统服务,用来管理Activity启动和调度,包括其容器(task、stacks、displays等)。
Android 10将原先AMS中对activity的管理和调度移到了ActivityTaskManagerService中,位置放到了wm下(见上面完整路径),因此AMS负责四大组件中另外3个(service, broadcast, contentprovider)的管理和调度。
首先看下
mSystemServiceManager.startService(
ActivityTaskManagerService.Lifecycle.class)这行代码,
是调用了系统服务管理器SystemServiceManager的startService方法,在此以启动ATMS为例说明:
源码位置/frameworks/base/services/core/java/com/android/server/SystemServiceManager.java

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

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

相关文章

微信小游戏之三消(三)道具相关方法

设计一个 game class。负责了游戏的核心控制逻辑,包括游戏状态管理、方块和道具的生成与效果处理,以及游戏的重新开始和复活流程。通过这些方法,脚本实现了游戏的基本玩法和用户交互。 主要游戏控制方法 gameStart():开始游戏&am…

攻防世界 re 新手模式 2

IgniteMe 32位无壳 一些简单信息&#xff0c;看关键函数 可以得到v7[i]的值 比较简单的逆向 #include<stdio.h> #include<string.h> int main() {char flag[40];char s[40];char str[]"GONDPHyGjPEKruv{{pj]XrF";char ch[] {0x0D, 0x13, 0x17, 0x11,…

AI到底有没有前景?到底要不要学习AI?

前言 在当今这个科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了一个热门话题。对于想要进入这一领域的学习者来说&#xff0c;心中难免会有一些疑问&#xff1a;“AI到底有没有前景&#xff1f;”、“我到底要不要学习AI&#xff1f;”、“我学…

Vue使用阿里巴巴字体

阿里巴巴字体使用效果 字体包下载 官方下载链接 解压字体文件到指定的文件夹 引用字体文件 我的是uniApp的项目&#xff0c;所以在公共css样式中引用这个字体文件 /*每个页面公共css */ font-face {font-family: "alimamFont";font-weight: 400;src: url("~/s…

Could not install packages due to an EnvironmentError: [WinError 5]

Could not install packages due to an EnvironmentError: [WinError 5] 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城…

WordPress原创插件:启用关闭经典编辑器和小工具

WordPress原创插件&#xff1a;启用关闭经典编辑器和小工具 主要功能 如图所示&#xff0c;用于启用或禁用经典编辑器和经典小工具&#xff0c;以替代Gutenberg编辑器。 插件下载 https://download.csdn.net/download/huayula/89592822

[Windows CMD] 检测网络连通性 ping

ping 是一个非常常用的网络工具&#xff0c;用于测试网络连接的可达性和测量网络延迟。它通过发送 ICMP (Internet Control Message Protocol) Echo Request 数据包到目标主机&#xff0c;并等待接收回显应答 (Echo Reply) 来工作。ping 命令可以帮助您快速检测网络问题&#x…

oracle 19c RAC-OracleLinux8.10安装19c遇到的问题

问题一&#xff1a; 操作系统是OracleLinux8.10 使用$ORACLE_HOME/gridSetup.sh -applyPSU /patch/36582629 安装集群正常&#xff0c;但安装数据库软件时 $ORACLE_HOME/runInstaller -applyPSU /patch/36582629报错&#xff0c;因赶工不使用applyPSU参数安装正常&#xff0c…

一款超实用的网络实时监控工具,助你轻松掌握 Docker 容器网络状态

1. 什么是 check-docker-connection check-docker-connection 主要用于监控 Docker 容器的网络连接情况。它可以显示指定容器的网络连接状态&#xff0c;包括 TCP 和 UDP 连接的数量。用户可以通过容器 ID 或名称来指定要监控的容器&#xff0c;或者指定显示连接数最多的前 N …

linux:用户管理,增删改

1.查看当前登录的用户信息 [root@bgx ~]# id #查看当前所登陆的用户信息 # uid:用户id,系统只能识别uid,不能识别名字,人看名字 # gid:组id uid=0(root) gid=0(root) groups=0(root) [root@bgx ~]# id oldboy #查看其它用户的信息 uid=1000(oldboy) gid=1000(oldboy) g…

【CTFHub】文件上传漏洞详解!

Webshell&#xff1a; 又称一句话木马。WebShell就是以网页文件形式存在的一种代码执行环境&#xff0c;主要用于网站管理、服务器管理、权限管理等操作。 WebShell根据不同的语言分为:ASP木马、PHP木马、JSP木马(上传解析类型取决于网站服务端编写语言类)&#xff0c;该类木马…

生成式人工智能的下一代基础设施是集群系统

GenAI 的存储和网络 本研究报告探讨了生成式人工智能 (GenAI) 在转变人工智能数据中心方面的关键作用。强调了存储和网络在支持人工智能/机器学习工作负载方面的重要性。 我们强调需要高容量、经济高效的存储&#xff0c;以处理不同数据处理阶段的不同 I/O 模式。 还讨论了检…

如何使用CANoe自带的TCP/IP Stack验证TCP的零窗口探测机制

如果想利用CANoe自带的TCP/IP协议栈验证TCP的零窗口探测机制,就必须添加一个网络节点并配置独立的CANoe TCP/IP协议栈,作为验证对象。而与它进行TCP通信的对端也是一个网络节点,但不要配置TCP/IP协议栈,而是使用CAPL代码在底层组装TCP报文模拟TCP通信过程。这样可以尽量减少…

项目实战_表白墙(简易版)

你能学到什么 一个比较简单的项目&#xff1a;表白墙&#xff08;简易版&#xff09;&#xff0c;浏览器&#xff1a;谷歌升级版将在下个博客发布 效果如下 正文 说明 我们是从0开始一步一步做这个项目的&#xff0c;里面的各种问题&#xff0c;我也会以第一人称视角来解…

国服最强文字转音频?Fish Speech

官网文档与示例 Fish Speech V1.2 是一款领先的文本到语音 (TTS) 模型&#xff0c;使用 30 万小时的英语、中文和日语音频数据进行训练。我尝试用1066运行&#xff0c;但是质量不尽如人意&#xff0c;建议使用RTX系列的显卡进行推理。 使用结果展示 text """20…

有哪些高性价比开放式耳机推荐?五大实力超群热门款分享

开放式耳机的优点包括不堵塞耳道&#xff0c;佩戴稳固性高&#xff0c;能较好的感知外界的声音等等&#xff0c;以上这些优势使得开放式耳机特别适配户外运动场景&#xff0c;在工作、日常生活等场景下使用也是绰绰有余。有哪些高性价比开放式耳机推荐&#xff1f;如果你还不知…

常用传感器讲解十五--触摸传感器(KY-036)

常用传感器讲解十五–触摸传感器&#xff08;KY-036&#xff09; 具体讲解 这个比较简单&#xff0c;就是触摸后给个信号 电路连接 在Arduino上将VCC引脚连接到5V。 将GND连接到Arduino的GND。 将OUT连接到Arduino上的D2 代码实现 void setup() {pinMode(2, INPUT);Seri…

鸿蒙HarmonyOS开发:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

文章目录 一、装饰器二、概述三、限制条件四、装饰器说明五、Toggle组件1、子组件2、接口3、ToggleType枚举4、事件 六、示例演示1、代码2、效果 一、装饰器 State装饰器&#xff1a;组件内状态Prop装饰器&#xff1a;父子单向同步Link装饰器&#xff1a;父子双向同步Provide装…

大模型是如何“炼”成的?揭秘AI背后的训练秘籍!

在当今科技飞速发展的时代&#xff0c;大模型&#xff08;Large Language Models&#xff09;已成为人工智能领域的璀璨明星。它们如同经过精心雕琢的艺术品&#xff0c;能够处理各种复杂的任务。然而&#xff0c;这些大模型并非天生如此强大&#xff0c;它们需要经过严格的训练…