SystemServer服务和ServiceManager服务分析

SystemServer服务和ServiceManager服务分析_站在巨人的肩膀上,温故而知新的博客-CSDN博客_systemservicemanager

SystemServer vs ServiceManager_Eliot_shao的博客-CSDN博客

整体启动流程: 

启动用户级别的第一个进程: init 进程。init 进程会解析init.rc 脚 本 做一些初始化工作,包括挂载文件系统、创建工作目录以及启动系统服务进程等,其中系统服务进程包括 Zygote、service manager、media 等 。在 Zygote 中 会 进 一 步 去 启 动 system_ server进 程 , 然 后 在 system_server 进 程 中 会 启 动 AMS、WMS、PMS 等 服 务 ,等 这 些 服 务 启 动 之 后 ,AMS 中 就 会 打 开 Launcher 应 用 的 home Activity, 最 终 就 看 到 了 手 机 的 "桌 面 "。

一、SystemServer服务分析

1、SystemServer概述

SystemServer是Android系统的一个核心进程,它是由zygote进程创建的,因此在android的启动过程中位于zygote之后。android的所有服务循环都是建立在 SystemServer之上的。在SystemServer中,将可以看到它建立了android中的大部分服务,并通过ServerManager的add_service方法把这些服务加入到了ServiceManager的svclist中。从而完成ServcieManager对服务的管理。

2、SystemServer启动的服务

二、ServiceManager服务分析

2.1 ServiceManager服务概述

(1) 服务进程,是android系统的核心服务之一
(2) 系统服务管理:管理系统和应用向系统添加的服务
(3) 查询获取服务:响应client请求并返回相应的服务
Android应用如果想要获取某个系统服务,这个系统服务需要提前添加到ServiceManager中。如果ServiceManager异常退出,系统会重启。如果该服务重启,系统会重启zygote,surfaceflinger,media等服务。

2.2 ServiceManager是何时创建的?

ServiceManager是由init进程通过解析init.rc文件而创建的,其所对应的可执行程序/system/bin/servicemanager,所对应的源文件是service_manager.c。

    service servicemanager /system/bin/servicemanagerclass coreuser systemgroup systemcriticalonrestart restart healthdonrestart restart zygoteonrestart restart mediaonrestart restart surfaceflingeronrestart restart drm

从这里可以看出servicemanager 是init通过init.rc加载的第一个进程,接下来启动了zygote和media

ServiceManager管理服务

(1) 系统或Android应用进程发送添加系统服务的请求,通过binder进程间通信到ServiceManager进程处理,然后检查发起请求的进程的权限,再检查该服务是否已经存在,如果存在直接返回;如果不存在,将该服务添加到Service List里。
(2) 获取该服务时也是通过binder进程间通信到ServiceManager进程处理,查询Service List找出该Service,然后返回。

简单小结:

init.rc --> servicemanager --> zygote --> fork的第一个进程 system_server --> 开启AMS/WMS...并注册到servicemanager进程中,向外提供服务。

Activity启动解析

如何评价360的Android插件化框架RePlugin? - 知乎

  1. 调用Context.startActivity -> ActivityManagerNative -> AMS, AMS通过Intent从PMS拿到ActivityInfo并创建ActivityRecord和token放入前台ActivityStack,接着按需启动Activity所属进程
  2. 进程启动后,马上执行入口ActivityThread.main并调用attachApplication将启动信息反馈到AMS,AMS通过pid找到对应的ProcessRecord并更新其数据
  3. 从前台ActivityStack中拿到栈顶的ActivityRecord,如果其proecssrecord为null,并且uid和processname跟新创建的ProcessRecord一致,则正式调用app.thread.scheduleLaunchActivity
  4. ActivityThread在scheduleLaunchActivity中创建ActivityClientRecord,用于跟AMS中的ActivityRecord对应,ActivityClientRecord最重要的两个字段是token和activityinfo,token用于关联ActivityRecord,activityinfo则包含activity的描述和所属包等信息
  5. 在scheduleLaunchActivity内部接着发送LAUNCH_ACTIVITY message到mH这个handler,mH收到LAUNCH_ACTIVITY message后

三、AMS启动做了啥事

主要负责系统中 四大组件 的启动、切换、调度及应用程序的管理和调度等工作。

  • AMS是在SystemServer进程中进行创建并启动的
  • 在AMS的服务启动过程中,通过构造函数进行了一些对象的创建和初始化工作(初Activity外其他3大组件的列表和调度对象的创建;内存、电池、权限、CPU等的监控等等相关对象的创建),并且通过start()方法启动服务(移除进程组、启动CPU线程、权限注册、电池服务等等)。

AMS启动详解 - 掘金

面试:系统启动流程简介相关推荐

  1. 【Android 系统开发】 Android 系统启动流程简介

    作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3889548 ...

  2. Arm linux系统启动流程简介

    文章目录 介绍 一.Bootloader 1.总体流程 二.Linux内核 1.总体流程 2.具体流程 总结 介绍 Arm Linux 系统启动流程可分为四个部分: 1.引导加载程序(bootload ...

  3. Bootloader及u-boot简介/u-boot系统启动流程

    Bootloader及u-boot简介 Bootloader代码是芯片复位后进入操作系统之前执行的一段代码,主要用于完成由硬件启动到操作系统启动的过渡,从而为操作系统提供基本的运行环境,如初始化CPU ...

  4. 学习笔记之centos系统启动流程

     CentOS 系统的启动流程: 简介: (内核级别)POST -读取-> BootSequence(在BIOS中) --> BootLoader(在MBR中)--> Kernel( ...

  5. arm linux系统启动流程

    ===================================================== arm linux系统启动相关文章列表: arm linux系统启动流程 http://bl ...

  6. Android系统启动流程(nougat7.1.1_r6)

    一.Android启动简介 Android 是一种基于 Linux 的开放源代码软件栈,为广泛的设备和机型而创建.下图所示为 Android 平台的主要组件. Linux 内核 Android 平台的 ...

  7. QT程序启动加载流程简介

    1. QT应用程序启动加载流程简介 1.1      QWS与QPA启动客户端程序区别 1.1.1   QWS(Qt Window System)介绍 QWS(Qt Windows System)是Q ...

  8. +++++++X86平台系统启动流程

    操作系统的组成.内核的功能.库.函数.头文件.函数名.Linux内核.X86平台系统启动流程 忘记密码如何登陆系统 操作系统的组成:kernel + rootfs , kernel + 应用程序 ke ...

  9. CentOS系统启动流程

    CentOS系统启动流程 POST-->Boot Sequence(BIOS) -->bootloader(MBR)-->Kernel-->rootfs(readonly)-- ...

最新文章

  1. 一个失败的操作系统MULTICS
  2. P4016 负载平衡问题(最小费用最大流)
  3. 第二十六期:HTTP 3的前世今生及尝鲜
  4. 量子计算机如何确定量子状态,量子计算机六个量子位足以确定三个简单分子的基态...
  5. JSP和HTML中实现字符串换行
  6. 两个sql交集_简单明了的sql基础语句
  7. 王道 —— 进程的定义、组成、组织方式、特征
  8. CodeSmith Professional 5与VS2010有冲突
  9. 论文阅读(XiangBai——【AAAI2017】TextBoxes_A Fast Text Detector with a Single Deep Neural Network)...
  10. 内容查询部件 之 简单美化
  11. 短网址算法 php,php实现的短网址算法分享
  12. python发送以太网报文_python之分解以太帧
  13. 组态王bitset用法_组态王使用问题解答8
  14. 绝地反击显示服务器,绝地反击
  15. 计算机死机后 通过任务管理器关闭程序,电脑死机后,按哪个键结束程序
  16. apipost中文版
  17. 马萨诸塞大学阿姆赫斯特分校计算机科学专业,UMass Amherst的CS「马萨诸塞大学安姆斯特分校计算机科学学系」...
  18. 【机器学习】RBF神经网络原理与Python实现
  19. 用Qt操作Word文档
  20. 【刷题日记】网易——俄罗斯方块

热门文章

  1. 开业当天销售额达30万,番茄口袋能否打造线下“小红书”?
  2. matlab符号运算化简命令
  3. 关于任意文件下载及上传漏洞
  4. 虚幻引擎之多线程渲染机制
  5. wangeditor富文本编辑器添加上传本地视频功能
  6. 什么是uber-jar
  7. 1024•假如程序员心想事成
  8. 用python获取本地的ip地址
  9. 字符标签转数字编码、独热编码 及独热编码转数字编码
  10. IT: 服务经纪人的未来