Activity 生命周期事务封装 (ClientTransaction)

在 Android 8.0 之后,系统引入了 ClientTransaction 机制来重构 Activity 的生命周期管理。这是一种基于“事务”的设计模式,将原本散落在 AMS 中的各种生命周期指令进行了统一封装。

1. 为什么需要事务封装?

在旧版本中,AMS 直接调用应用进程的 IApplicationThread 接口(如 scheduleLaunchActivity)。这种方式扩展性差,且难以处理复杂的复合状态切换。
引入事务后,AMS 只需要发送一个 ClientTransaction,其中包含了:

  • Callback:如 LaunchActivityItem(创建 Activity)。
  • FinalState:如 ResumeActivityItem(最终状态)。

2. 核心组件

  • ClientTransaction:事务容器。
  • ClientTransactionHandler:在应用进程中(通常是 ActivityThread)负责执行事务。
  • TransactionExecutor:事务执行器,负责按照正确的逻辑顺序(例如先 Create 再 Resume)调度事务中的各项指令。

3. 生命周期执行链路

  1. AMS 服务端:创建 ClientTransaction,并添加对应的生命周期 Item。
  2. 跨进程传递:通过 IApplicationThread.scheduleTransaction 发送到目标 App 进程。
  3. App 客户端ActivityThread 收到后,交给 TransactionExecutor 执行。
  4. 执行逻辑
    • executeCallbacks():执行如 LaunchActivityItem 等初始化操作。
    • executeLifecycleState():执行如 ResumeActivityItem 等状态变更操作。

4. 总结

生命周期事务封装是 Android 系统现代化的重要体现。它不仅让 AMS 的逻辑更加简洁,也为后续的 多窗口模式折叠屏 复杂状态切换提供了坚实的底层架构支持。

, ,