2023年11月26日发(作者:)

⾯试:Activity的启动流程简述

Activity的启动的整体流程:

1. Launcher进程请求AMS

2. AMS发送创建应⽤进程请求

3. Zygote进程接受请求并孵化应⽤进程

4. 应⽤进程启动ActivityThread

5. 应⽤进程绑定到AMS

6. AMS发送启动Activity的请求

7. ActivityThread的Handler处理启动Activity的请求

⼀、Launcher进程请求AMS

根Activity的启动流程其实就是桌⾯上点击⼀个应⽤图标进⼊到应⽤的第⼀个Activity的流程,其实桌⾯也可以看成⼀个程序,即

Launcher。当系统开机后,Launcher也随之被启动,然后将已经安装的应⽤程序图标显⽰到桌⾯上,所以当我们点击⼀个应⽤图标其实就

2.1 AMS将请求任务转移给Process

//获取即将要启动的Activity的所在的应⽤程序进程

//如果应⽤进程已经存在

//应⽤进程还未创建,则通过AMS调⽤startProcessLocked()向Zygote进程发送请求

//创建应⽤进程的⽤户ID --> startProcess()

2.2 ProcessZygote进程发送创建应⽤进程请求

与Zygote进程建⽴了Socket连接

这样AMS就完成了向Zygote进程发送创建应⽤进程的请求的任务。

三、Zygote进程接受请求并孵化应⽤进程

现在Zygote进程接受请求是在main⽅法,

,就让我们来看看这个main⽅法

@UnsupportedAppUsage

public static void main(String argv[]) {

ZygoteServer zygoteServer = new ZygoteServer();

Runnable caller;

try {

...

//创建名为zygoteSocket

ZygoteSocket(socketName);

....

//由于在中设置了start-system-server参数,因此

//这⾥将启动SystemServer,可见SystemServerZygote创建的第⼀个进程

if (startSystemServer) {

Runnable r = forkSystemServer(abiList, socketName, zygoteServer);

if (r != null) {

();

return;

}

}

caller = astulaPool();

if (caller == null) {

四、应⽤进程启动ActivityThread