linux的根进程,android系统是基于linux系统的,因此可以算作是整个android操作系统的第一个进程;
Zygote进程
android系统的根进程,可以作用Zygote进程fork出SystemServer进程和各种应用进程;
SystemService进程
主要是在这个进程中启动系统的各项服务,比如ActivityManagerService,PackageManagerService,WindowManagerService服务等;
各种应用进程
启动自己编写的客户端应用时,一般都是重新启动一个应用进程,有自己的虚拟机与运行环境;
Zygote进程的执行过程
其中Zygote进程由init进程启动,SystemServer进程和应用进程由Zygote进程启动。本文依据7.0源码,主要分析Zygote进程的启动流程。init进程在启动Zygote进程时会调用ZygoteInit#main()。
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
ZygoteInit#main()
public static void main(String argv[]) {
…
try {
//设置DDMS可用
RuntimeInit.enableDdms(); //1
//初始化启动参数
boolean startSystemServer = false;
String socketName = “zygote”;
String abiList = null;
//2
for (int i = 1; i < argv.length; i++) {
if (“start-system-server”.equals(argv[i])) {
startSystemServer = true;
} else if (argv[i].startsWith(ABI_LIST_ARG)) {
abiList = argv[i].substring(ABI_LIST_ARG.length());
} else if (argv[i].startsWith(SOCKET_NAME_ARG)) {
socketName = argv[i].substring(SOCKET_NAME_ARG.length());
} else {
throw new RuntimeException("Unknown command line argument: " + argv[i]);
}
}
if (abiList == null) {
throw new RuntimeException(“No ABI list s