应用程序进程启动过程

--摘自《Android进阶解密》

1.AMS在启动应用程序时会检查者应用程序需要的应用进程是否存在,不存在就会请求Zygote进程启动需要的应用程序进程

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

3.Zygote进程通过fock自身创建应用程序进程,这样应用程序进程就会获得Zygote进程在启动时创建的虚拟机实例。当然还创建了Binder线程池和消息循环,这样运行在应用进程中的应用程序就可以方便地使用Binder进行进程间通信以及处理消息了

应用程序进程启动过程

第一步:AMS发送启动应用程序进程请求

第二步:Zygote接收请求并创建应用程序进程

其中:

4.ZygoteInit类的zygoteInit方法会启动Binder线程池

5.将当前线程注册到Binder驱动程序中,这样我们创建的线程就加入了Binder线程池中,新创建的应用程序进程就支持Binder进程间通信了,我们只需要创建当前进程的Binder对象,并将它注册到ServiceManager中就可以实现Binder进程间通信

6.RuntimeInit的invokeStaticMain方法最后会抛出一个MethodAndArgsCaller异常,抓取异常过程中会执行call.run方法,run方法中会调用mMethod.invoke,其实就是ActivityThread的main方法,main方法中开启了消息循环

猜你喜欢

转载自www.cnblogs.com/anni-qianqian/p/10170818.html