Launcher 中的 Icon 点击,broadcast 发送,启动 Service 等组件见的跳转,都会通过 AndroidManagerProxy 来进行中转,而 AndroidManagerProxy 通过向 SystemServer 请求名为 Activity 的 ActivityManagerService 的 Binder 对象,这个 Binder 对象可以粗略地看作是 ActivityManagerService 的句柄,从 Binder 对象可实际操作 ActivityManagerService。
ActivityManagerService 在实际启动相应组件时,会先判断是否有相应的 ProcessRecord,如果不存在,就需要新建进程,这个进程就是相应的应用进程。ActivityManagerService 通过 Socket 通信的方式和 Zygote 进行协商,Zygote 在其监听的 /dev/socket/zygote socket 中发现有需要创建进程的请求后,会 fork 自身,并返回相应的 Process Id。这个 Process 会进行相应的初始化,使得其具备与系统服务进行 IPC 通信的能力,在此之后,调用 ActivityThread 中的 main 方法,开启 Looper,主线程启动。到此为止,整个应用进程启动完毕。