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
- ApplicationThreadProxyApplicationThreadProxy对象通过Binder IPC与客户端通信。
- ApplicationThread
- Handler
- ActivityThread
- Activity
 调用onResume方法
AMS(SystemServer进程)与zygote通过Socket进行IPC通信
参考:http://blog.csdn.net/zhaokaiqiang1992/article/details/49428287