Android 应用程序进程启动

应用程序进程启动过程 与 应用程序启动过程 是两个不同的概念,本文简单的记录进程的启动过程

要想启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程已经启动。

Zygote的Java框架层中会创建一个Server端的Socket,这个Socket用来等待AMS请求Zygote来创建新的应用程序进程。

Zygote进程通过fock自身创建应用程序进程,这样应用程序进程就会获得Zygote进程在启动时创建的虚拟机实例。

在应用程序进程创建过程中除了获取虚拟机实例外,还创建了Binder线程池和消息循环,

这样运行在应用进程中的应用程序就可以方便地使用Binder进行进程间通信以及处理消息了。

AMS发送启动应用程序进程请求

AMS会通过调用startProcessLocked方法向Zygote进程发送请求

Zygote接收请求并创建应用程序进程

ZygoteInit类的zygoteInit方法创建Binder线程池

将当前线程注册到Binder驱动程序中,这样我们创建的线程就加入了Binder线程池中,新创建的应用程序进程就支持Binder进程间通信了,我们只需要创建当前进程的Binder对象,并将它注册到ServiceManager中就可以实现Binder进程间通信,而不必关心进程间是如何通过Binder进行通信的。

RuntimeInit的invokeStaticMain方法创建消息循环(Looper)

系统在应用程序进程启动完成后,就会创建一个消息循环,

这样运行在应用程序进程中的应用程序可以方便地使用消息处理机制(Handler)。

原文地址:https://www.cnblogs.com/lukelmouse/p/14517364.html