前言
本文基于Android 9.0(Android P),API 28。
本文是APP启动流程分析的上篇,对总体流程进行分析。
如果已经了解总体流程,请看源码流程分析 APP启动流程分析(下)
总流程
Launcher、AMS、Zygote、app都处于不同的进程,他们之间需要跨进程才能通信。
用户点击Launcher的app图标后,Launcher通知AMS,如果目标app未启动(冷启动),AMS会通过Socket来通知Zygote去创建进程,Zygote就fork出我们要启动的app进程。
紧接着app要打开HomeActivity,需要与AMS交互
- app -> AMS : 因为AMS启动时,就注册到ServiceManager了,所以app调用getService就能从ServiceManager获取到AMS的代理类IActivityManager(客户端)。app从而通过IActivityManager调用AMS(服务端)的方法。
- AMS -> app : AMS准备一个IBinder,叫IApplicationThread(服务端)。当app进程启动完成后,会调用IApplicationThread的attachApplication方法,把app的代理类ApplicationThread(客户端)作为参数传给AMS。AMS可以调用ApplicationThread的方法从而控制app。
IApplicationThread的实现类是ActivityThread的内部类ApplicationThread
看完流程图,我们再来看时序图
图中的4就是attachApplication的过程,把app的代理类ApplicationThread交给AMS。
图中的5就是AMS做完一些处理后&#