Android Activity栈关系解析

一、核心类职责解析

1. ActivityRecord(活动记录)

  • 职责:记录单个 Activity 的元数据(如 Intent、启动模式、组件信息)和生命周期状态(如 RESUMED、PAUSED),并管理其窗口层级与焦点。
  • 示例:启动 MainActivity 时,系统创建 ActivityRecord 存储其启动参数与状态。

2. TaskRecord(任务记录)

  • 职责:以栈(LIFO)形式管理一组 ActivityRecord,处理返回键逻辑(如回退栈顶 Activity)。
  • 关键属性
    • taskAffinity:决定 Activity 归属的任务栈。
    • rootActivity:任务栈的根 Activity(首个启动的 Activity)。
  • 示例:从微信主界面跳转到聊天窗口,ChatActivity 被压入同一 TaskRecord

3. ActivityStack(活动栈)

  • 职责:管理一组 TaskRecord,控制其可见性(如暂停后台栈)和焦点状态(前台/后台切换)。
  • 类型
    • 应用栈:普通应用的任务栈。
    • Home 栈:桌面与最近任务列表的栈。
    • 分屏栈:多窗口模式下的独立栈。
  • 示例:分屏模式下,左右两侧分别对应独立的 ActivityStack

4. ActivityDisplay(活动显示器)

  • 职责:协调物理/虚拟显示设备(如手机主屏、外接显示器)上的所有 ActivityStack,处理多屏交互(如窗口拖拽)。
  • 示例:连接外接显示器时,系统创建两个 ActivityDisplay 分别管理主屏与外接屏的任务栈。

5. ActivityStackSupervisor(活动栈监督者)

  • 职责:全局协调所有 ActivityDisplayActivityStack,处理 Activity 启动、切换、销毁等核心逻辑,并维护当前焦点栈。
  • 关键行为
    • 根据启动模式(如 singleTask)和 Intent 标志(如 FLAG_ACTIVITY_NEW_TASK)决定 Activity 归属栈。
    • 处理跨栈操作(如分屏调整任务层级)。

二、层级关系与协作流程

graph TD
    A[ActivityStackSupervisor] --> B[ActivityDisplay] 
    B --> C[ActivityStack] 
    C --> D[TaskRecord] 
    D --> E[ActivityRecord]
  • 实际场景
    1. 分屏模式下,ActivityStackSupervisor 创建两个 ActivityDisplay(主屏与外接屏)。
    2. 每个 ActivityDisplay 管理独立的 ActivityStack,例如左侧运行微信,右侧运行浏览器。
    3. 用户点击微信返回键时,ActivityStackSupervisor 找到左侧栈顶的 ChatActivity 并销毁,回退到 MainActivity
    4. 拖拽浏览器窗口到左侧屏幕时,ActivityStackSupervisor 将浏览器任务迁移至左侧 ActivityStack

三、对开发者的实践意义

  1. 调试工具

    • 使用 adb shell dumpsys activity activities 查看任务栈信息,例如:

      Display #0 (手机主屏):
        Stack #0: type=standard, bounds=[0,0][1080,1920]
          Task #100: affinity=com.wechat, size=2
            ActivityRecord{MainActivity}
            ActivityRecord{ChatActivity}
      
  2. 启动模式与任务栈

    • singleTask 模式会复用或创建新任务栈,FLAG_ACTIVITY_NEW_TASK 强制启动新任务。
  3. 多窗口适配

    • 分屏模式下需处理 Configuration 变化(如屏幕尺寸),确保界面布局合理。

四、总结

Android 的 Activity 任务栈管理通过 ActivityRecord(砖块)TaskRecord(房间)ActivityStack(楼层)ActivityDisplay(整栋楼)ActivityStackSupervisor(物业总公司) 构建起完整的体系。开发者需理解其协作逻辑,合理使用启动模式与调试工具,以优化多任务体验。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。