Android系统启动
Android系统基于linux系统开发,因此再很多内核加载,驱动加载,挂载根文件系统,方面基本一样。当Android做完linux内核加载后就会执行用户控件的第一个进程init进程,其赋值孵化各种系统即服务,守护进程,和Zygote进程(可孵化Java进程)
init.cpp的main方法主要做的事情:
- 创建启动系统需要的文件目录并挂载
- 初始化属性相关资源和启动属性服务,相当于设置环境变量
- 解析init.rc配置文件
启动了几个重要的进程- ServiceManager
- MediaServer
- SurfaceFlinger
- Zygote
ServiceManager
启动Binder,乃Binder IPC 通信过程中的守护进程,提供服务的查询和注册
MediaServer 启动 AudioFlinger 音频服务,CameraService 相机服务。负责处理音频解析播放,相机相关的处理。
SurfaceFlinger
负责图像绘制,UI的核心。
Zygote
孵化所有Android应用进程,通过fork复制进程创建应用进程和SystemServer进程,
Zygote进程主要做的事:
- 创建了AndroidRuntime并调用其start方法,启动Zygote进程。
- 创建Java虚拟机并为Java虚拟机注册JNI方法。
- 通过JNI调用ZygoteInit的main函数进入Zygote的java框架层。
- 然后执行ZygoteInit.java的mian方法,创建一个Server端的Socket,预加载类和资源,启动SystemServer进程,然后一直等待AMS的请求来创建应用程序进程
SystemServer进程
主要用于创建PathClassLoader,启动Binder线程池,创建系统服务:
public static void main(String[] args){new SystemServer().run();}private void run(){...startBootstrapServices();//创建消息LooperLooper.prepareMainLooper();//加载动态库System.loadLibrary(\"android_servers\");//创建SystemServiceManagermSystemServiceManager=new SystemServiceManager(mSystemContext);// 启动引导服务startBootstrapServices();// 启动核心服务startCoreServices();// 启动其他服务startOtherServices();...