一、系统启动
1.Android系统启动流程
Android系统架分为应用层,framework层,系统运行库层(Native),Linux内核层 启动按照一个流程:
Loader->kernel->framework->Application来进行的
1.Bootloader引导
当电源按下时,引导芯片代码 从 ROM (4G)开始执行。Bootloader引导程序把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行,启动Linux内核。
Linux kernel 内核启动,会做设置缓存,加载驱动等一些列操作
当内核启动完成之后,启动 init 进程,作为第一个系统进程, init 进程从内核态转换成用户态。
2.init进程启动
fork 出 ServerManager 子进程。 ServerManager主要用于管理我们的系统服务,他内部存在一个server服务列表,这个列表中存储的就是那些已经注册的系统服务。
解析 init.rc 配置文件并启动 Zygote 进程
3.Zygote进程启动
孵化其他应用程序进程,所有的应用的进程都是由zygote进程fork出来的。 通过创建服务端Socket,等待AMS的请求来创建新的应用程序进程。
创建SystemServer进程,在Zygote进程启动之后,会通过ZygoteInit的main方法forkSystemServer进程
4.SystemServer进程启动
创建SystemServiceManager,它用来对系统服务进行创建、启动和生命周期管理。
ServerManager.startService启动各种系统服务:WMS/PMS/AMS等,调用ServerManager的addService方,将这些Service服务注册到ServerManager里面
启动桌面进程,这样才能让用户见到手机的界面。
5.Launcher进程启动
开启系统Launcher程序来完成系统界面的加载与显示。
![](https://i-blog.csdnimg.cn/blog_migrate/ba76f85461044922f18e79dc176216da.png)
2.SystemServer,ServiceManager,SystemServiceManager的关系
在SystemServer进程中创建SystemServiceManager, ServiceManager是系统服务管理者,SysytemServiceManager启动一些继承自SystemService的服务,并将这些服务的Binder注册到ServiceManager中,对于其他的一些继承于IBinder的服务,通过ServiceMaanager的addService方法添加。
SystemServer:
SystemServer是一个由zygote孵化出来的进程, 名字为system_server 。 SystemServer叫做系统服务进程,大部分Android提供的一些系统服务都运行在该进程中,包括AMS,WMS,PMS,这些系统的服务都是以一个线程的方式存在在SysyemServer进程中。
SystemServiceManager:
管理一些系统的服务,在SystemServer中初始化。启动各种系统服务:WMS/PMS/AMS等,调用ServerManager的addService方,将这些Service服务注册到ServerManager里面
ServiceManager:ServiceManager像是一个路由,Service把自己注册在ServiceManager中,客户端通过ServiceManager查询服务
维护一个svclist列表来存储service信息。
向客户端提供Service的代理,也就是BinderProxy。
维护一个死循环,不断的查看是否有service的操作请求,如果有就读取相应的内核binder driver。
3. 孵化应用进程这种事为什么不交给SystemServer来做,而专门设计一个Zygote
-
<