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