应用程序进程启动过程

Posted anni-qianqian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用程序进程启动过程相关的知识,希望对你有一定的参考价值。

--摘自《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方法中开启了消息循环

以上是关于应用程序进程启动过程的主要内容,如果未能解决你的问题,请参考以下文章

Android深入四大组件应用程序启动过程

根Activity启动过程中涉及的进程

根Activity启动过程中涉及的进程

android 性能优化 -- 启动过程 冷启动 热启动

AMS和Activity启动过程

从烧瓶启动分离过程