下面以应用桌面Launcher启动App的MainActivity来举例:
App启动概述
首先,MainActivity是由Launcher组件来启动的,而Launcher又是通过Activity管理服务ActivityManagerService(AMS)来启动MainActivity组件的。由于MainActivity组件和Launcher组件,以及AMS是三个不同的进程, 所以这三个不同的进程只能通过 Binder进程间通信机制来完成MainActivity组件的启动过程。
App启动过程
- Launcher组件向AMS发送一个启动MainActivity组件进程间通信请求。
- AMS首先要将启动MainActivity的信息保存起来,然后向Launcher发送一个中止状态的进程间通信请求。
- Launcher组件进入到中止状态以后,会向AMS发送一个已经进入了中止状态的进程间通信请求,以便 AMS可以继续执行启动 MainActivity组件的操作。
- AMS如果发现启动MainActivity进程不存在,就会创建一个新的应用程序进程。
- 新的应用程序进程启动后,就会向AMS发送一个启动完成的进程间通信请求,以便 AMS可以继续执行启动MainActivity组件的操作。
- AMS将第二步保存下来的MainActivity的信息发送到第四步启动创建的应用程序进程,以便它可以将MainActivity组件启动起来。
App启动过程图
源码分析
未完待续^-^