init
init是一个进程,是用户空间的第一个进程。
对应源文件:init.c
。执行main方法,执行许多操作。其中一个操作就是读取配置文件init.rc
两个重要的职责:
- 负责创建系统中的几个关键进程,比如创建zygote进程。
- 提供属性服务(property service),类似于window平台的注册表
zygote
zygote是由init进程根据init.rc文件中的配置项创建的。
它最初的名字是“app_process”,后被替换为“zygote”。
对应的源文件:App_main.cpp
。执行main方法。
调用了AppRuntime.start(“com.android.internal.os.zygoteInit”,startSystemServer)方法。由于AppRuntime继承自AndroidRuntime,实际的start方法执行了3步
- 创建虚拟机 - startVm
- 注册JNI函数 - startReg
- 由C调用java代码 - ZygoteInit.java
在**ZygoteInit.java**main函数中,执行5个关键点
- 建立IPC通信服务端 - registerZygoteSocket
- 预加载类和资源 - preloadClasses和preloadResources
- 启动system_server进程 - startSystemServer
- 有求必应之等待请求 - runSelectLoopMode
- caller.run