- 了解Zygote的作用
- 启动SystemServer
- 孵化应用进程
- 熟悉Zygote的启动流程
启动三段式
- 进程启动
- 准备工作
- Loop循环(不停地接收消息与处理消息,消息可能是socket发过来的,也可能是MessageQueue中的消息,也可能是Binder驱动发送过来的消息)
Zygote的启动流程
- 进程是如何启动的? init进程会加载init.rc启动配置文件,会启动已配置的系统服务,zygote就是所需要启动的服务之一,除了Zygote进程还有ServiceManager进程等,Zygote是由Init进程通过fork+execve系统调用启动的。
- 深刻理解Zygote的工作原理
启动进程的两种方式
- fork+handle
- fork+execve
信号处理-SIGCHLD
- 父进程fork子进程,如果fork失败,父进程会收到SIGCHLD信号,并做相关处理。
Zygote进程启动之后做了什么?
- Zygote的Native世界(为了之后进入java世界做准备)1、启动Android虚拟机 2、注册Android的JNI函数 3、进入Java世界
- Zygote的java世界1、预加载资源,如主题资源、共享库等 2、fork SystemServer 3、进入LOOP循环,等待socket消息
要注意的细节
- Zygote fork要单线程
- Zygote的IPC没有采用Binder,而是采取的socket