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 Process向Zygote进程发送创建应⽤进程请求
与Zygote进程建⽴了Socket连接
这样AMS就完成了向Zygote进程发送创建应⽤进程的请求的任务。
三、Zygote进程接受请求并孵化应⽤进程
现在Zygote进程接受请求是在main⽅法,
,就让我们来看看这个main⽅法
@UnsupportedAppUsage
public static void main(String argv[]) {
ZygoteServer zygoteServer = new ZygoteServer();
Runnable caller;
try {
...
//创建名为zygote的Socket
ZygoteSocket(socketName);
....
//由于在中设置了start-system-server参数,因此
//这⾥将启动SystemServer,可见SystemServer由Zygote创建的第⼀个进程
if (startSystemServer) {
Runnable r = forkSystemServer(abiList, socketName, zygoteServer);
if (r != null) {
();
return;
}
}
caller = astulaPool();
if (caller == null) {
四、应⽤进程启动ActivityThread
发布评论