Android Framework 之AMS

它管理了系统的四大组件: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.mzph.cn/web/50533.shtml

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

相关文章

记录|LabVIEW从0开始

目录 前言一、表达式节点和公式节点二、脚本与公式2.1 公式 三、Excel表格3.1 位置3.2 案例:波形值存入Excel表中3.3 案例:行写入,列写入 四、时间格式化4.1 获取当前时间4.2 对当前时间进行格式化 更新时间 前言 参考视频: LabVI…

【STL】之 vector 使用方法及模拟实现

前言: 本文主要讲在C STL库中vector容器的使用方法和底层的模拟实现~ 成员变量的定义: 对于vector容器,我们首先采用三个成员变量去进行定义,分别是: private:iterator _start; // 指向数据块的开始iterator _finish…

React类组件生命周期与this关键字

类组件生命周期 参考链接 一图胜千言(不常用的生命周期函数已隐藏) 代码: //CC1.js import { Component } from "react";export default class CC1 extends Component {constructor(props) {super(props);console.log("con…

【Vue3】watchEffect

【Vue3】watchEffect 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文…

【代码随想录第37天| 完全背包,518. 零钱兑换 II ,377. 组合总和 Ⅳ,70. 爬楼梯 (进阶)】

完全背包 完全背包中&#xff0c;每件物品都有无数件&#xff1b;这主要影响了遍历背包容量时的遍历顺序&#xff0c;应该从小到大去遍历&#xff0c;这样才能包括有多件相同物品的情况。 思路 先遍历物品&#xff0c;再遍历背包 for(int i 0; i < weight.size(); i) {…

pnpm 设置国内源

pnpm config set registry https://registry.npmmirror.com/

16、DDD系列-向微服务迈进

在本章中&#xff0c;我们将探讨如何从传统的单体架构向微服务架构演进。这个过程需要考虑许多因素&#xff0c;包括微服务的驱动力、所需条件、服务粒度的确定以及系统复杂性的治理。 1、目的&#xff1a;微服务的驱动力 微服务的主要驱动力是业务需求的快速变化和系统的可扩…

[Mysql-数据库基本知识了解]

为什么学习数据库&#xff1f; 数据的保存&#xff1a; 大量程序产生的数据在程序 运行时和程序结束运行后 数据应该怎么保存&#xff1f; 数据的完整性 &#xff1a;数据和数据之间的结构关系&#xff0c; 数据和程序之间的依赖关系&#xff0c; 如何能让这些关系持久维系…

C++初学(7)

7.1、字符串 字符串是存储在内存的连续字节中的一系列字符。C处理字符串的方式有两种&#xff0c;第一种是来自C语言&#xff0c;常被称为C风格字符串&#xff0c;另一种则是基于string类库的方法。 存储在连续字节中的一系列字符意味着可以将字符存储在char数组中&#xff0…

微信小程序开发 快速学习 这篇就够了

目录 一、配置篇 &#xff08;1&#xff09;官网链接&#xff1a; &#xff08;2&#xff09;项目分析 &#xff08;3&#xff09;调试器 &#xff08;4&#xff09;预览体验 &#xff08;5&#xff09;配置文件 &#xff08;6&#xff09;配置pages &#xff08;7&…

vue3组件通信(二)

组件通信 一.$attrs(祖>孙间接&#xff09;二、$refs()父>子&#xff0c; $parent()子>父三.provide&#xff0c;inject(祖>孙直接&#xff09;四.pinia五.slot1.默认插槽2.具名插槽3.作用域插槽 一.$attrs(祖>孙间接&#xff09; $attrs用于实现当前组件的父组…

实习心得—20240725

在实习的过程中&#xff0c;遇到了很多问题&#xff0c;对于fpga开发来说&#xff0c;我一开始值懂得一些皮毛&#xff0c;仅限于读懂代码或者写一些简单的代码&#xff0c;当接触到一个大的项目的时候&#xff0c;我发现很多事情并不是想象中的那么容易。 一个大的项目是由许…

CSRF Token 原理

CSRF 攻击 CSRF 攻击成功的关键是&#xff0c;恶意网站让浏览器自动发起一个请求&#xff0c;这个请求会自动携带 cookie &#xff0c;正常网站拿到 cookie 后会认为这是正常用户&#xff0c;就允许请求。 防范 如果在请求中加一个字段&#xff08;CSRF Token&#xff09;&am…

鸿蒙开发—黑马云音乐之Music页面

目录 1.外层容器效果 2.信息区-发光效果 3.信息区-内容布局 4.播放列表布局 5.播放列表动态化 6.模拟器运行并配置权限 效果&#xff1a; 1.外层容器效果 Entry Component export struct MuiscPage {build() {Column() {// 信息区域Column() {}.width(100%)// .backgroun…

kubernetes管理GUI工具Lens

从github上可以知道&#xff0c;lens的前端是用electron做的客户端工具&#xff0c;打开安装路径你会发现kubectl.exe,没错&#xff0c;就是你经常用的kubectl命令行的客户端工具。kubectl本来就能输出json的数据类型&#xff0c;集成前端更方便了。看到这里你是不是发现&#…

MATLAB学习日志DAY23

创建矩阵 MATLAB 提供了许多函数&#xff0c;用于创建各种类型的矩阵。 例如&#xff0c;可以使用基于帕斯卡三角形的项创建一个对称矩阵&#xff1a; A pascal(3) A 1 1 1 1 2 3 1 3 6 也可以创建一个非对称幻方矩阵&#xff0c;它的行总和与列总和相等&#xff1a; B…

操作系统(系统简介、库文件、环境变量、编译器、系统特性)

一、UNIX系统介绍 诞生于1971年美国AT&T公司的贝尔实验室&#xff0c;主要开发者是丹尼斯.里奇、肯.汤普逊。 该系统的主要特点是支持多用户、多任务&#xff0c;并支持多种处理器架构&#xff0c;同时具有高安全性、高可靠性、高稳定性&#xff0c;既可以构建大型关键业…

Linux云计算 |【第二阶段】AUTOMATION-DAY5

主要内容&#xff1a; YAML语法格式&#xff0c;层级关系、Ansible Playbook文件及语法格式、Ansible变量&#xff08;定义变量方法、优先级顺序、setup和debug查看变量&#xff09; 补充&#xff1a;Ansible ad-hoc 可以通过命令行形式远程管理其他主机&#xff0c;适合执行一…

视频逐帧播放查看神器-android闪黑闪白等分析辅助工具

背景 刚好有学员朋友在群里问道有没有什么播放软件可以实现对视频的逐帧即一帧一帧播放。在做android系统开发时候经常会偶尔遇到有时候是闪黑&#xff0c;闪白等一瞬间现象的问题。这类问题要分析的话就不得不需要对设备录屏&#xff0c;然后对录屏进行逐帧播放查看现象&…

2020真题-架构师案例(五)

问题1&#xff08;13分&#xff09; 针对该系统的功能&#xff0c;孪工建议采用管道-过滤器&#xff08;pipe and filter&#xff09;的架构风格&#xff0c;而王工则建议采用仓库&#xff08;reposilory&#xff09;架构风格。满指出该系统更适合采用哪种架构风格&#xff0c…