首页 > 系统相关 >SystemServer 进程的启动流程

SystemServer 进程的启动流程

时间:2024-08-03 11:26:18浏览次数:14  
标签:服务 启动 流程 系统 Zygote 进程 SystemServer

一、SystemServer  进程简介

1.  SystemServer 进 程 主 要 的 作 用 是 启 动 各 种 系 统 服 务 , 比 如ActivityManagerService,PackageManagerService,WindowManagerService 等各种服务。当我们的应用需要使用各种系统服务的时候也是通过与 SystemServer进程通讯获取各种服务对象的句柄的。

2.SystemServer进程由Zygote进程通过调用forkSystemServer方法(底层调用fork方法)创建出来。

二、SystemServer进程main()创建的Looper对象的消息循环的 run  方法的执行流程

1.  首先判断系统当前时间,若当前时间小于 1970年1月1日,则设置系统当前时间为该时间点。

2.  然后是设置系统的语言环境。

3.  接着设置虚拟机运行内存,加载运行库,设置SystemServer的异步消息。

4. run  方法中 createSystemContext() 的调用
1)  调用 createSystemContext()方法来创建系统级别的上下文,涉及到加载系统资源、主题等。
2)  在 SystemServer 进程中也存在着 Context对象,并且是通过ActivityThread.systemMain 方法创建的。

5. mSystemServiceManager  的创建
1)  在 run 方 法 中 , 通 过 SystemServiceManager 的 构 造方 法 创 建 了 一 个 新 的SystemServiceManager 对象。我们知道SystemServer 进程主要是用来构建系统各种service 服务的,而 SystemServiceManager 负责管理这些系统服务的生命周期,包括启动、停止和绑定服务。
2)  将 SystemServiceManager 对象保存到SystemServer进程中的一个数据结构中。

三、 启动服务
1.  简介
在开始执行启动服务之前会先尝试通过 socket 方式连接 Zygote进程,在成功连接之后才会开始启动其他服务。

2. Installer 的 onStart 方法
执行 mInstaller 的 waitForConnection方法。Installer 类是系统安装 apk 时的一个服务类,继承 自SystemService(系统服务的一个抽象接口),需要在启动完Installer 服务之后才能启动其他的系统服务。

3.  waitForConnection()方法
不断的通过 ping 命令连接 Zygote 进程(SystemServer 和 Zygote 进程通过 socket方式通信,其他进程之间通过 Binder方式通信)。
源码如下:


public void waitForConnection() {
for (;;) {
if (execute("ping") >= 0) {
return;
}
Slog.w(TAG, "installd not ready");
SystemClock.sleep(1000);
}
}

四、总结

1.  SystemServer 进程是 android 中一个很重要的进程,并由 Zygote 进程启动。

2.  SystemServer 进程主要用于启动系统中的服务。

3.  SystemServer 进程启动服务的入口点为 main 方法。

4.  SystemServer在执行过程中会初始化一些系统变量,加载类库,创建 Context 对象,创建 SystemServiceManager对象等之后才开始启动系统服务。

5.  SystemServer 进程将系统服务分为三类:引导服务(Bootstrap Services),核心服务(Core Services)和 其他服务(Other Services),并逐步启动。

6.  SystemServer 进程在启动服务之前会首先尝试与 Zygote进程 建立 socket 通讯,只有通讯成功之后才会开始启动服务。

7.  创建系统服务的过程中主要通过 SystemServiceManager 对象来管理,通过调用服务对象的构造方法和onStart方法来初始化服务的相关变量。

8.  服务对象都有自己的异步消息对象,并运行在单独的线程中。

9.  SystemServer进程需要与其他进程进行通信,因此会初始化Binder线程池,以便可以通过Binder机制与其他进程进行跨进程通信。

10. 在启动完所有必要的系统服务后,SystemServer进程会通过调用Looper.loop()方法进入消息循环,并等待并处理其他进程的请求或系统内部的事件。

11. 在SystemServer进程创建之后,会关闭Zygote进程在子进程中不需要的文件描述符。


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

标签:服务,启动,流程,系统,Zygote,进程,SystemServer
From: https://blog.csdn.net/cxsjabcabc/article/details/140887599

相关文章

  • 【用户案例】破局与超越:承德银行如何通过RPA重塑监管统计流程
    近年来,承德银行不断努力,力求在监管报表提交领域实现智能化转型。面对报表数据零散分布于多元业务系统、缺乏成熟数据仓库支持、以及依赖传统手工填报和自下而上的逐级上报流程等挑战,该行采取了一系列革新措施。这些措施包括:细致审视并强化报送流程中的薄弱点,深入剖析智能化报送障......
  • 【Linux进程理解】| 冯诺依曼体系结构 | 操作系统 | 进程理解 | 状态 | 优先级
    本文目录【写在前面】一、冯•诺依曼体系结构......
  • 利用开源可视化报表工具进入流程化办公!
    很多客户朋友都希望能实现流程化办公,因为只有这样才能帮助企业顺利降本、增效、提质,利用好企业内部数据资源,打破信息孤岛壁垒,实现高效发展。低代码技术平台、开源可视化报表工具优势功能特点多,是提质高效的办公利器。了解行业趋势的朋友们都知道,数字化发展及流程化办公是发展潮流......
  • Transformer 工作流程(大白话版)
    Transformer工作流程:通俗易懂的解释想象一下,你在参加一个创意写作班,你和其他几位同学一起写一篇故事。老师会让每个人轮流写一段,但在写之前,你们可以参考之前同学写的内容。这有点像Transformer的工作流程。让我们一步步来解释。编码器(Encoder)1.输入嵌入层(InputEmbed......
  • Linux——进程信号(下)
    一、产生信号1、通过终端按键生产信号。如Ctrl+C,2、调用系统函数向进程发信号。kill函数,在命名解释行上 klii选项进程id(不演示,我们通过代码模拟kill命令)intkill(pid_tpid,intsig);参数:pid:进程的id;sig:要发送信号返回值:成功返回0,错误返回-1代码实现:voidUasge(ch......
  • Linux:守护进程(进程组、会话和守护进程)
    守护进程(1)What(什么是守护进程)在了解守护进程的同时,我们有必要介绍一下进程组和会话的概念,因为进程组和会话在创建守护进程的过程中不可或缺守护进程:本质就是一个后台进程,不依赖于具体终端、生命周期比较长进程组:进程的集合,该集合有一个ID,被称为“进程组ID“,此外,......
  • 简要说一下关于实现整个深度学习项目的流程
    我们以识别生物信号为例子,其他类似与图像、文本和目标/故障检测的同样适用1.信号预处理;首先要将得到的生物信号进去噪音去除,另外所有的生物信号由于采样时间不同可能长度并不一样,这时候你需要统一长度。2.特征工程;你需要对所有的经过预处理并且将要输入神经网络的信号提取特......
  • 靠谱的抖音短视频 SEO 矩阵系统源码开发部署----搭建流程分享
    一、需求分析在开始抖音短视频SEO矩阵系统源码的开发部署之前,首先需要明确您的业务需求和目标。例如,您希望系统具备哪些功能,是侧重于关键词优化、内容推荐还是用户行为分析等。同时,还需要考虑系统的可扩展性、稳定性以及与抖音平台的兼容性。通过多平台账号绑定、多任务创......
  • 程序员进阶架构知识体系、开发运维工具使用、Java体系知识扩展、前后端分离流程详解、
    场景作为一名开发者,势必经历过从入门到自学、从基础到进阶、从学习到强化的过程。当经历过几年企业级开发的磨炼,再回头看之前的开发过程、成长阶段发现确实是走了好多的弯路。作为一名终身学习的信奉者,秉承持续学习、持续优化的信念。不惜耗费无数个日日夜夜,耗费大量时间精力......
  • 学习C语言的第4天--运算符与流程控制
    今日目标了解各种运算符及其用法。掌握条件语句和循环语句的使用。每日练习目录今日目标运算符1.算术运算符2.关系运算符3.逻辑运算符4.位运算符5.赋值运算符6.其他运算符条件运算符(三元运算符)指针运算符逗号运算符流程控制1.条件语句if语句if-else语句......