摘要:梳理一下android系统的启动流程,从init进程 到java层面

init是一个进程,做完android系统启动的第一个进程,同时也是linux内核启动的第一个进程,init进程在启动过程中起到了重要的责任。

init进程的工作

  • 1.解析配置文件
    在init进程中会解析两个配置文件,一个是init.rc, 另一个是 与硬件平台相关的 配置
  • 2.解析Service
  • 3.启动zygote

关于 zygote

zygote本身是个Native程序。原名app_process ,该名字 在Android.mk中指定,运行在 该进程又将自己的 名字改成zygote,
zygote 启动AppRuntime.
在AppRuntime 中主要完成了3步

  • 1.创建虚拟机 startVm
  • 2.注册JNI函数 startReg
  • 3.调用com.android.internal.os.Zygotelnit的main函数,正式让系统进入了java语言的世界

在Zygotelnit 的main函数中

  • 1.建立IPC通信服务端
  • 2.调用registerZygoteSocket ,通过这个函数他可以相应子孙后代的请求,预加载类和资源(预加载相当多的类 1000多个 想想 android启动为啥慢)
  • 3.启动system_server 分裂出一个子进程(承担一部分责任,建立与Binder的链接,调用init1 和inti2来启动一些系统服务)
  • 4.zygote完成创世纪调用下runSelectLoopMode 便睡了