课程3: Android启动过程分析
相关技术文章
首先参阅一下别人写得很不错的文章,个人感觉还是有很多可以借鉴的内容
1. Android启动过程深入解析 原文链接
当然,小伙伴们若是英文足够好,可以直接查看:英文原文
我们先来粗略查看一下文章要点
####第一步:启动电源以及系统启动
当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。
####第二步:引导程序
引导程序是运行的第一个程序,因此它是针对特定的主板与芯片的;
引导程序是OEM厂商或者运营商加锁和限制的地方;
####第三步:内核
Android内核与桌面linux内核启动的方式差不多。
####第四步:init进程
init进程有两个责任,一是挂载目录,比如/sys、/dev、/proc,二是运行init.rc脚本
####第五步:Zygote
Zygote让Dalvik虚拟机共享代码、低内存占用以及最小的启动时间成为可能。
Zygote是一个虚拟器进程,正如我们在前一个步骤所说的在系统引导的时候启动。Zygote预加载以及初始化核心库类。
####第六步:系统服务或服务
系统服务同时使用native以及java编写,系统服务可以认为是一个进程。
系统服务包含了所有的System Services。
Zygote创建新的进程去启动系统服务。你可以在ZygoteInit类的”startSystemServer”方法中找到源代码。
####第七步:引导完成
ACTION_BOOT_COMPLETED
启动已完成的广播
备注:在init.rc上还可以使用on property:dev.bootcomplete=1
来处理你期望开机完成后做爱做的事情
2. Android启动分析 原文链接
由于前一篇文章,在system_server或services
上讲解不够深入,现在利用这一篇文章来粗略讲解一下
关于这个文章的英文原文: 链接: Android Start Up
接下来这一段,我是依据 链接: 2.3服务启动过程 来讲解有关 system_server
和Services
的内容
####1. daemons
和Zygote
init.rc
启动类似adbd
,debuggerd
,rild
等核心后台进程,用于监听指定信息
Zygote
是用于初始化虚拟机的进程,监听请求创建虚拟机实例的socket,算是App的“鼻祖”
####2. Services Manager
在 init.rc 有这么一段内容
service servicemanager /system/bin/servicemanager
class core
user system
group system
critical
onrestart restart healthd
onrestart restart zygote
onrestart restart media
onrestart restart surfaceflinger
onrestart restart drm
init.rc启动Service Manager,注册为Binder服务缺省的context manager,处理服务注册和监听
####3. system_server
system_server是由Zygote分裂出来的一个进程(而非原文所说的由Runtime拉起)
争议
:这里原文可能是针对较低版本的,经过分析源码,正确的应该是 链接: system_server启动流程
####4. System server
init1和init2
在system_server
起来之后,它调用了init1
和init2
init1: 拉起了
SurfaceFlinger
和AudioFlinger
等(与硬件层交互的服务,主要是C/C++代码)
####5. 原生server sevices
向service manager
注册为IPC服务目标
比如AudioFlinger.cpp的instantiate函数
init2: 拉起了
Activity Manager
和Window Manager
等(与应用层、框架层交互的服务,主要是Java代码)
####6. Android managed services
SystemServer.java的run函数
####7. Android managed services
向service manager
注册
####8. system_server
加载所有的服务后,系统初始化完成
####9. 桌面程序
ActivityManagerService.java
的startHomeActivityLocked
####10.其他App在自己进程中启动
3. 图解Android - Zygote, System Server 启动分析 原文链接
这绝对是一篇好文,写得很精彩
相应的,这个博主的Github相关链接: android_url
我对这里的system_server
启动流程比较感兴趣,这里只贴出system_server
相关的启动流程图