Android应用程序进程启动过程
学习《Android进阶解密》(刘望舒著)第三章,慕课网framework视频教程第三章
应用程序进程简介
要启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程已经启动。AMS在启动应用程序时会检查这个应用程序所需要的应用程序进程是否存在,不存在就会请求Zygote进程启动需要的应用程序进程。Zygote的Java框架层中会创建一个Server端的Socket,这个Socket用来等待AMS请求Zygote来创建新的应用程序进程。Zygote进程通过fork自身来创建应用程序进程,这样应用程序进程就会获得Zygote进程在启动时创建的虚拟机实例。当然,在应用程序进程创建过程中除了获取虚拟机实例外,还创建了Binder线程池和消息循环体,这样运行在应用程序中的应用程序就可以方便地使用Binder进行进程间通信及消息处理了。需要注意,此处讨论的是“应用程序进程启动过程”,而不是“应用程序启动过程”。
应用程序进程启动过程介绍
应用程序进程创建过程步骤较多,主要分为两大部分。
- AMS发送启动应用程序进程请求;
- Zygote接受请求并创建应用程序进程。
AMS发送启动应用程序进程请求
Zygote接收请求并创建应用程序进程
总结
- 启动应用组件时,会先判断应用组件所在的进程是否启动,若没有则启动进程;
- AMS通过socket向zygote发起请求,启动进程;
- zygote fork出进程后,会执行ActivityThread的main函数;
- 进程启动之后会向AMS报告,注册ApplicationThread。