先看一下应用进程的创建流程:
- AMS通过调用Process.start()来创建应用进程
- 在Process.start()里面通过ZygoteProcess的zygoteSendArgsAndGetResult与Zygote进程(Zygote是谁?它是进程孵化大师,创建之初就使用zygoteServer.registerServerSocketFromEnv创建zygote通信的服务端;然后还通过调用forkSystemServer启动system_server;然后是zygoteServer.runSelectLoop进入循环模式)建立Socket连接,并将创建进程所需要的参数发送给Zygote的Socket服务端
Zygote进程的Socket服务端(ZygoteServer)收到参数后调用ZygoteConnection.processOneCommand() 处理参数,并 fork 进程
- 在Process.start()里面通过ZygoteProcess的zygoteSendArgsAndGetResult与Zygote进程(Zygote是谁?它是进程孵化大师,创建之初就使用zygoteServer.registerServerSocketFromEnv创建zygote通信的服务端;然后还通过调用forkSystemServer启动system_server;然后是zygoteServer.runSelectLoop进入循环模式)建立Socket连接,并将创建进程所需要的参数发送给Zygote的Socket服务端
- 然后通过RuntimeInit的findStaticMain()找到ActivityThread类的main方法并执行