面试:系统启动流程简介
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? - 知乎
- 调用Context.startActivity -> ActivityManagerNative -> AMS, AMS通过Intent从PMS拿到ActivityInfo并创建ActivityRecord和token放入前台ActivityStack,接着按需启动Activity所属进程
- 进程启动后,马上执行入口ActivityThread.main并调用attachApplication将启动信息反馈到AMS,AMS通过pid找到对应的ProcessRecord并更新其数据
- 从前台ActivityStack中拿到栈顶的ActivityRecord,如果其proecssrecord为null,并且uid和processname跟新创建的ProcessRecord一致,则正式调用app.thread.scheduleLaunchActivity
- ActivityThread在scheduleLaunchActivity中创建ActivityClientRecord,用于跟AMS中的ActivityRecord对应,ActivityClientRecord最重要的两个字段是token和activityinfo,token用于关联ActivityRecord,activityinfo则包含activity的描述和所属包等信息
- 在scheduleLaunchActivity内部接着发送LAUNCH_ACTIVITY message到mH这个handler,mH收到LAUNCH_ACTIVITY message后
三、AMS启动做了啥事
主要负责系统中 四大组件 的启动、切换、调度及应用程序的管理和调度等工作。
- AMS是在SystemServer进程中进行创建并启动的
- 在AMS的服务启动过程中,通过构造函数进行了一些对象的创建和初始化工作(初Activity外其他3大组件的列表和调度对象的创建;内存、电池、权限、CPU等的监控等等相关对象的创建),并且通过start()方法启动服务(移除进程组、启动CPU线程、权限注册、电池服务等等)。
AMS启动详解 - 掘金
面试:系统启动流程简介相关推荐
- 【Android 系统开发】 Android 系统启动流程简介
作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3889548 ...
- Arm linux系统启动流程简介
文章目录 介绍 一.Bootloader 1.总体流程 二.Linux内核 1.总体流程 2.具体流程 总结 介绍 Arm Linux 系统启动流程可分为四个部分: 1.引导加载程序(bootload ...
- Bootloader及u-boot简介/u-boot系统启动流程
Bootloader及u-boot简介 Bootloader代码是芯片复位后进入操作系统之前执行的一段代码,主要用于完成由硬件启动到操作系统启动的过渡,从而为操作系统提供基本的运行环境,如初始化CPU ...
- 学习笔记之centos系统启动流程
CentOS 系统的启动流程: 简介: (内核级别)POST -读取-> BootSequence(在BIOS中) --> BootLoader(在MBR中)--> Kernel( ...
- arm linux系统启动流程
===================================================== arm linux系统启动相关文章列表: arm linux系统启动流程 http://bl ...
- Android系统启动流程(nougat7.1.1_r6)
一.Android启动简介 Android 是一种基于 Linux 的开放源代码软件栈,为广泛的设备和机型而创建.下图所示为 Android 平台的主要组件. Linux 内核 Android 平台的 ...
- QT程序启动加载流程简介
1. QT应用程序启动加载流程简介 1.1 QWS与QPA启动客户端程序区别 1.1.1 QWS(Qt Window System)介绍 QWS(Qt Windows System)是Q ...
- +++++++X86平台系统启动流程
操作系统的组成.内核的功能.库.函数.头文件.函数名.Linux内核.X86平台系统启动流程 忘记密码如何登陆系统 操作系统的组成:kernel + rootfs , kernel + 应用程序 ke ...
- CentOS系统启动流程
CentOS系统启动流程 POST-->Boot Sequence(BIOS) -->bootloader(MBR)-->Kernel-->rootfs(readonly)-- ...
最新文章
- 一个失败的操作系统MULTICS
- P4016 负载平衡问题(最小费用最大流)
- 第二十六期:HTTP 3的前世今生及尝鲜
- 量子计算机如何确定量子状态,量子计算机六个量子位足以确定三个简单分子的基态...
- JSP和HTML中实现字符串换行
- 两个sql交集_简单明了的sql基础语句
- 王道 —— 进程的定义、组成、组织方式、特征
- CodeSmith Professional 5与VS2010有冲突
- 论文阅读(XiangBai——【AAAI2017】TextBoxes_A Fast Text Detector with a Single Deep Neural Network)...
- 内容查询部件 之 简单美化
- 短网址算法 php,php实现的短网址算法分享
- python发送以太网报文_python之分解以太帧
- 组态王bitset用法_组态王使用问题解答8
- 绝地反击显示服务器,绝地反击
- 计算机死机后 通过任务管理器关闭程序,电脑死机后,按哪个键结束程序
- apipost中文版
- 马萨诸塞大学阿姆赫斯特分校计算机科学专业,UMass Amherst的CS「马萨诸塞大学安姆斯特分校计算机科学学系」...
- 【机器学习】RBF神经网络原理与Python实现
- 用Qt操作Word文档
- 【刷题日记】网易——俄罗斯方块