Init.rc脚本解析启动ServiceManager, Zygote。
Zygote 启动SystemServer。
SystemServer启动各种服务,包含 ActivityManagerService。
ActivityManagerService启动 Launcher(桌面程序)
init进程创建出 service manager 进程,然后创建出 zygote 进程,zygote进程 fork 出 system service 进程的同时开启 socket 监听。
system service 进程启动各种服务,比如 AMS。AMS 启动完成后将自己注册到 service manager 进程, 然后启动 Launcher,启动 Launcher 需要 socket 与 zygote 通信 fork 出新的进程。Launcher 出现后,点击桌面图标,用 AMS 利用 socket 与 zygote 通信 fork 出新的进程,在子进程执行ActivityThread.main(String[ ])
其中,AMS 与 zygote 用 socket 通信。用户进程 ,system service 进程,service manager 进程间两两通过 Binder 通信。
zygote 进程在创建的过程中调用 AndroidRuntime::startVm( )来启动虚拟机,随后经由 zygote 孵化的子进程可以快速获得这个虚拟机的拷贝。