AI智能
改变未来

Android系统启动简要流程


Android系统启动

Android系统基于linux系统开发,因此再很多内核加载,驱动加载,挂载根文件系统,方面基本一样。当Android做完linux内核加载后就会执行用户控件的第一个进程init进程,其赋值孵化各种系统即服务,守护进程,和Zygote进程(可孵化Java进程)

init.cpp的main方法主要做的事情:

  1. 创建启动系统需要的文件目录并挂载
  2. 初始化属性相关资源和启动属性服务,相当于设置环境变量
  3. 解析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();...
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Android系统启动简要流程