You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
1.4 KiB
31 lines
1.4 KiB
---
|
|
应用程序进程启动过程
|
|
---
|
|
|
|
#### 目录
|
|
|
|
1. 应用程序进程简介
|
|
2. 应用程序进程启动过程
|
|
3. Binder 线程池启动过程
|
|
4. 消息循环创建过程
|
|
|
|
#### 应用程序进程简介
|
|
|
|
要想启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程已经启动。AMS 在启动应用程序时会检查这个应用程序需要的应用程序进程是否存在,不存在就会请求 Zygote 进程启动需要的应用程序进程。Zygote 的 Java 框架层中会创建一个 Server 端的 Socket,这个 Socket 用来等待 AMS 请求 Zygote 来创建新的应用程序进程。Zygote 进程通过 fork 自身创建应用程序进程,这样应用程序进程就获得了 Zygote 进程在启动时创建的虚拟机实例。当然,在应用程序进程创建过程中除了获取虚拟机实例外,还创建了 Binder 线程池和消息循环,这样运行在应用程序进程中的应用程序就可以使用 Binder 进行进程间通信以及消息处理了。
|
|
|
|
#### 应用程序进程启动过程
|
|
|
|
启动过程可以分为两步:
|
|
|
|
1. AMS 发送启动应用程序进程的请求
|
|
|
|
AMS 如果想要启动应用程序进程,就需要向 Zygote 进程发送创建应用程序进程的请求,AMS 会通过调用 startProcessLocked 方法向 Zygote 进程发送请求。
|
|
|
|
2. Zygote 接受请求并创建应用程序进程
|
|
|
|
#### Binder 线程池启动过程
|
|
|
|
|
|
|
|
#### 消息循环创建过程
|
|
|
|
|