第四章 四大组件工作过程.md
4.1 根 Activity 的启动过程
根 Activity 指的是应用程序启动的第一个 Activity,这里主要分为三个过程:
Launcher 请求 AMS,AMS 到 ApplicationThread 的调用过程,ActivityThread 启动 Activity 。
4.1.1 Launcher 请求 AMS 过程
4.1.2 AMS 到 ApplicationThread
该过程代码比较复杂,这里直接给出进程通讯图:
4.1.3 ActivityThread 启动 Activity 过程
这里 H 为 handler,主要是使用消息队列机制保证在主线程执行 。
4.1.4 根 Activity 启动涉及的进程通讯
其中,步骤 2 采用 Socket 通信,步骤 1 和 4 采用 Binder 通信。
4.2 Service 的启动过程
分为两个过程,ContextImpl 到 AMS 的调用过程和 ActivityThread 启动 Service 。
4.2.1 ContextImpl 到 AMS 的调用过程
4.2.2 ActivityTrhead 启动 Service
4.3 Service 的绑定过程
分为两个部分,分别是 ContextImpl 到 AMS 的调用过程和 Service 的绑定过程
4.3.1 ContextImpl 到 AMS 的调用过程
4.3.2 Service 的绑定过程
几个与 Service 相关的对象类型:
- ServiceRecord:描述一个 Service
- ProcessRecord:描述一个进程
- ConnectionRecord:描述进程和 Service 建立的一次通讯
- AppBindRecord:应用进程通过其来维护 Service 与应用进程之间的关联
- IntentBindRecord:描述绑定 Service 的 Intent
因为该过程较为复杂,书中分为两半给出时序图
4.4 广播的注册、发送和接收过程 (PASS)
4.5 ContentProvider 的启动过程(PASS)
4.6 小结
Android 7.0 的启动过程中除了以上过程,还涉及到 ActivityManagerProxy 和 ApplicationTrheadProxy 等代理类。以上过程为 Android 8.0 的过程,主要使用 AIDL 技术去掉了一些代理类(或者说自动生成)