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
客户端:ActivityManagerProxy –> Binder驱动 –> ActivityManagerService:服务器
- ActivityThread
老板,虽然说家里的事自己说了算,但是需要听从AMS的指挥 - Instrumentation
老板娘,负责家里的大事小事,但是一般不抛头露面,听一家之主ActivityThread的安排,每个Activity都有一个Instrumentation
引用,整个进程只有一个Instrumentation
实例 - ActivityManagerProxy
ActivityManagerNative.getDefault().startActivity获取ActivityManagerProxy
对象通过Binder IPC与AMS通信 - AMS
真正启动一个Ativity(ActivityStackSupervisor
,ActivityStack
)
Resume一个Activity
客户端:ApplicationThread <– Binder驱动 <– ApplicationThreadProxy:服务器
- AMS
- ApplicationThreadProxy
ApplicationThreadProxy
对象通过Binder IPC与客户端通信。 - ApplicationThread
- Handler
- ActivityThread
- Activity
调用onResume方法
AMS(SystemServer进程)与zygote通过Socket进行IPC通信
参考:http://blog.csdn.net/zhaokaiqiang1992/article/details/49428287