Android系统服务之AMS

news2024/9/27 9:28:09

目录

概述

重点和难点问题

启动方式

main入口:

run方法:

BootstrapSevices

小结:

与其他线程的通信原理

参考文档:


概述

AMS是Android系统主要负责四大组件的启动,切换,调度以及应用程序进程管理和调度等工作。

ATMS是系统服务,管理Activities和其他容器(task,stacks,display……)

主要依靠binder的方式进行跨进程通信。

重点和难点问题

启动方式

代码位置

frameworks/base/services/java/com/android/server/SystemServer.java

frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java

frameworks/base/services/core/java/com/android/server/SystemServiceManager.java

是由SystemServer启动的服务之一

main入口:

/**

 * The main entry point from zygote.

 */

public static void main(String[] args) {

    new SystemServer().run();

}

run方法:

记录进程的启动信息

系统时间

后面再设置一下数据库的兼容性就开始进入SystemServer了

虚拟机的内存设置

bundle和线程的一些设置

然后就开始初始化本地service

创建上下文context

创建SystemServiceManager

添加系统服务,并准备线程池来初始化并行任务

然后就开始start Service了

然后初始化虚拟机,就进入Looper.loop()循环

BootstrapSevices

启动watchdog

SystemServer初始化线程池

等待installd的启动完成,以有机会有权限创建关键目录,例如:/data/user,

需要先完成这个再初始化其他的服务。

在某些情况下,启动一个app后我们需要访问设备标识符,因此需要在ActivityManager之前注册设别标识符策略。

 Uri Grants Manager.

接下来就是启动ActivityManager了

先启动 ATMS的服务,再启动AMS的服务。Android10之前,AMS是主要负责对四大组件进行管理和调度,同时AMS也会对进程,电池,内存,权限等进行管理。再Android10开始,就把Activity的管理迁移到了ActivityTaskManagerService中,ActivityTaskManagerService也被缩写为ATMS。

ATMS并不是直接启动,而是SystemServiceManager通过 Lifecycle类来间接实现。 SystemServiceManager是一个辅助类,它用于辅助SystemServer进程启动和管理SystemServer进程中的各类服务Service。

由于需要管理的服务非常多,所以SystemServiceManager是通过管理所有实现了SystemService接口的类的方式来统一的运用反射启动这些服务。

Lifecycle 是 ATMS 里的静态内部类,静态内部类不依赖于外部类,它封装了ATMS对象,同时实现了SystemService接口。Lifecycle 构造方法调用时,会初始化内部成员变量 mService,即调用ATMS的构造方法,构造方法中会执行一些初始化操作。

....

梳理一下ATMS的startService:

首先:startService()内部是运用了反射获取到了serviceClass类的对象实例service,然后再调用startService(service)。就是说ATMS将自己的服务发布到ServiceManager上去,方便其他进程调用ATMS服务。

然后,调用Lifecycle中的onStart函数,通过这个onStart函数,将ATMS的本地服务保存到LocalServices列表中。

小结:

AMS&ATMS启动流程:

  1. 是SystemServer进程中的服务
  2. 是在SystemServer进程启动的时候启动的服务
  3. 他们启动的过程是由SystemServer通过SystemServiceManager对象进行统一管理
  4. ATMS&AMS会将自己的binder发布到ServiceManger进程
  5. ATMS&AMS会将自己的本地服务发布到LocalServices列表

与其他线程的通信原理

(未完待续……)

参考:

https://blog.51cto.com/u_16099299/6562938

https://article.juejin.cn/post/7250025436016492605

AOSPXRef

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

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

相关文章

watch避坑,使用computed进行处理数据

业务场景:在vue中监听el-input 中的字数有没有超过60,如果超过60字时将60后面的字变为 “>>” 符号,以此实现预览苹果手机推送摘要场景。 错误:开始的逻辑是使用watch监听,检查length超过60直接 加上符号&#x…

选好NAS网络储存解决方案,是安全储存的关键

随着网络信息的发展,NAS也越来越受到企业的关注,NAS网络存储除了提供简单的存储服务外,还可以提供更好的数据安全性、更方便的文件共享方式。但市面上的产品种类繁多,我们该如何选择合适的产品,通过企业云盘&#xff0…

spring5源码篇(12)——spring-mvc请求流程

spring-framework 版本:v5.3.19 文章目录 一、请求流程1、处理器映射器1.1、 RequestMappingHandlerMapping1.2、获取对应的映射方法1.3、添加拦截器 2、获取合适的处理器适配器3、通过处理器适配器执行处理器方法3.1、拦截器的前置后置3.2、处理器的执行3.2.1 参数…

Unity 性能优化二:内存问题

目录 策略导致的内存问题 GFX内存 纹理资源 压缩格式 Mipmap 网格资源 Read/Write 顶点数据 骨骼 静态合批 Shader资源 Reserved Memory RenderTexture 动画资源 音频资源 字体资源 粒子系统资源 Mono堆内存 策略导致的内存问题 1. Assetbundle 打包的时候…

【C++】C++ STL标准模板库知识点总结(秋招篇)

文章目录 前言STL的六大组件是?容器(container) 算法(algorithm) 迭代器(iterator) 三者的关系?容器分为几种?分别有哪些?关联性容器和非关联性容器有什么区别?Vector容器是怎么调整大小的?(内存…

VirtualEnv 20.24.0 发布

导读VirtualEnv 20.24.0 现已发布,VirtualEnv 用于在一台机器上创建多个独立的 Python 运行环境,可隔离项目之间的第三方包依赖,为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一…

RAM明明断电会丢失数据,为什么初始化的全局变量存储在RAM?详细分析程序的存储

前言 (1)之前因为一个字符指针和字符数组指针引发的bug,折磨了我一个下午才发现问题。之后我就打算研究一下系统是如何发现野指针乱访问问题。后面就一直深入到微机系统中的内存管理了。 (2)这些其实都是基础知识&…

SpringBoot房屋租赁系统【附ppt|万字文档(LW)和搭建文档】

主要功能 前台登录: ①首页:公告信息、房屋信息展示、查看更多等 ②房屋信息、房屋类型、我要当房主、公告信息、留言反馈等 ③个人中心:可以查看自己的信息、更新图片、更新信息、退出登录、我的收藏 后台登录: ①首页、个人中心…

Day 69-70:矩阵分解

代码: package dl;import java.io.*; import java.util.Random;/** Matrix factorization for recommender systems.*/public class MatrixFactorization {/*** Used to generate random numbers.*/Random rand new Random();/*** Number of users.*/int numUsers…

使用贝叶斯算法完成文档分类问题

贝叶斯原理 贝叶斯原理(Bayes theorem)是一种用于计算条件概率的数学公式。它是以18世纪英国数学家托马斯贝叶斯(Thomas Bayes)的名字命名的。贝叶斯原理表达了在已知某个事件发生的情况下,另一个事件发生的概率。具体…

【Golang系统开发】搜索引擎(1) 如何快速判断网页是否已经被爬取

文章目录 1. 写在前面2. 数组存储3. 位图存储3.1 位图简介3.2 链表法3.3 开放寻址法 1. 写在前面 在实际工作中,我们经常需要判断一个对象是否存在,比如判断用户注册登陆时候,需要判断用户是否存在,再比如搜索引擎中的爬虫&#x…

大数据面试题之Elasticsearch:每日三题(七)

大数据面试题之Elasticsearch:每日三题 1.Elasticsearch索引文档的流程?2.Elasticsearch更新和删除文档的流程?3.Elasticsearch搜索的流程? 1.Elasticsearch索引文档的流程? 协调节点默认使用文档ID参与计算(也支持通过routing)&a…

【UE4】给角色添加脚步声

步骤: 1. 导入一个脚步声音频文件(.wav格式) 2. 打开角色蓝图,这里以第三人称角色模板蓝图“ThirdPersonCharacter”为例,在事件图表中添加一个生成音效的自定义事件。 3. 打开动画序列“ThirdPersonRun” 找到小白人…

Python编程——while循环嵌套讲解(附案例)

作者:Insist-- 个人主页:insist--个人主页 本文专栏:Python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一、while嵌套的语法 二、注意事项 三、while嵌套循…

【Java】分支结构习题

【Java】分支结构 文章目录 【Java】分支结构题1 :数字9 出现的次数题2 :计算1/1-1/21/3-1/41/5 …… 1/99 - 1/100 的值。题3 :猜数字题4 :牛客BC110 X图案题5 :输出一个整数的每一位题6 : 模拟三次密码输…

统信UOS安装mysql数据库(mariadb)-统信UOS安装JDK-统信UOS安装nginx(附安装包)

统信UOS离线全套安装教程(手把手教程) 银河麒麟的各种离线全套安装教程: https://blog.csdn.net/ACCPluzhiqi/article/details/131988147 1.统信UOS桌面系统安装mysql(mariadb) 2.统信UOS桌面系统安装JDK 3.统信UOS桌…

CAN学习笔记3:STM32 CAN控制器介绍

STM32 CAN控制器 1 概述 STM32 CAN控制器(bxCAN),支持CAN 2.0A 和 CAN 2.0B Active版本协议。CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误,而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。 2 bxCAN 特性 波特率…

【JavaWeb】正则表达式

🎄欢迎来到边境矢梦的csdn博文,本文主要讲解Java 中正则表达式 的相关知识🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下🫰🫰&am…

Metabase RCE漏洞复现(CVE-2023-38646)

0x01 产品简介 Metabase是一个开源的数据分析和可视化工具,它可以帮助用户轻松地连接到各种数据源,包括数据库、云服务和API,然后使用直观的界面进行数据查询、分析和可视化。 0x02 漏洞概述 未经身份认证的远程攻击者利用该漏洞可以在服务器…

【C语言趣味教程】(4) 变量:代码注释 | 变量的声明 | 初始化与赋值 | 变量的命名 | 关键字 | 标识符 | 变量名的命名规范

🔗 《C语言趣味教程》👈 猛戳订阅!!! Ⅰ. 代码注释(Comment) 0x00 引入:注释的作用 "程序员最讨厌两种人:一种是不写注释的人,一种是让我写注释的人。…