外观
Zygote 和 SystemServer 是怎么启动的?
标准回答
设备先经过 Bootloader、内核和 init。init 根据 rc 配置启动 app_process,进入 Zygote 初始化,预加载部分常用类和资源,并建立用于接收进程创建请求的 socket。主要 Zygote 启动 system_server,SystemServer 再通过 SystemServiceManager 按启动阶段初始化系统服务,并进入运行循环。应用进程一般由 Zygote fork 并进行 UID、GID、SELinux 等身份配置,这能复用预加载内容和写时复制页。部分设备启用 USAP 进程池,所以不能把所有应用创建都描述成收到请求后才现场 fork。
延伸追问
ServiceManager 负责 Binder 服务的注册与发现,SystemServiceManager 管理 Java 系统服务启动和启动阶段,两者职责不同。
内容来源
- Android Framework 知识手册 · 原条目
1-6