Android系统启动加载流程:
参考图
Linux内核加载完毕启动init
进程init
进程fork出zygote
进程zygote
进程在ZygoteInit.main()
中进行初始化的时候fork出SystemServer
进程SystemServer
进程开启的时候初始化ActivityThread
和ActivityManagerService
(其它还有PowerManagerService
,DisplayManagerService
,PackageManagerService
)启动Launcher
,Launcher
本质上也是一个App,继承自Activity
App与AMS通过Binder进行IPC通信
启动一个Activity
ActivityThread客户端:ActivityManagerProxy --> Binder驱动 --> ActivityManagerService:服务器
老板,虽然说家里的事自己说了算,但是需要听从AMS的指挥Instrumentation
老板娘,负责家里的大事小事,但是一般不抛头露面,听一家之主ActivityThread的安排,每个Activity都有一个Instrumentation
引用,整个进程只有一个Instrumentation
实例ActivityManagerProxy
ActivityManagerNative.getDefault().startActivity获取ActivityManagerProxy
对象通过Binder IPC与AMS通信AMS
真正启动一个Ativity(ActivityStackSupervisor
,ActivityStack
)
Resume一个Activity
AMSApplicationThreadProxy客户端:ApplicationThread <-- Binder驱动 <-- ApplicationThreadProxy:服务器
ApplicationThreadProxy
对象通过Binder IPC与客户端通信。ApplicationThreadHandlerActivityThreadActivity
调用onResume方法
AMS(SystemServer进程)与zygote通过Socket进行IPC通信
参考:/zhaokaiqiang1992/article/details/49428287