- 职责:
- 四大组件管理(activity,service,content provider,boardcast recever)
- 主要工作就是管理,记录,查询。
- 四大组件进程通信的server端 四大组件属于client
- 属于系统进程的一部分
- ActivityStack.java:其实是个管理类,管理activity的各种状态
- ActivityRecord.java:ActivityStack的管理对象,每个Activity在AMS对应一个ActivityRecord,来记录Activity的状态以及其他的管理信息。其实就是服务器端的Activity对象的映像
- ActivityThread.java:主线程
- main方法
- 应用进程绑定 thread.attach(false)
- 主线程消息处理loop创建 Looper.prepareMainLooper()和Looper.loop()
- main方法
- H.java:Handler子类
- Instrumentation.java:这个东西我把它理解为ActivityThread的一个工具类,也算是一个劳动者吧,对于生命周期的所有操作例如onCreate最终都是直接由它来执行的。对于hook和测试会用到这个类
- ApplicationThread.java:用来实现ActivityManagerService与ActivityThread之间的交互。在ActivityManagerService需要管理相关Application中的Activity的生命周期时,通过ApplicationThread的代理对象与ActivityThread通讯
- Activity启动流程(http://gityuan.com/2016/03/12/start-activity/)
- 启动流程:
- 点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;
- system_server进程接收到请求后,向zygote进程发送创建进程的请求;
- Zygote进程fork出新的子进程,即App进程;
- App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
- system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;
- App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;
- 主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。