美文网首页
Android Activity栈关系解析

Android Activity栈关系解析

作者: 猿小蔡 | 来源:发表于2025-03-01 04:52 被阅读0次

一、核心类职责解析

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(物业总公司) 构建起完整的体系。开发者需理解其协作逻辑,合理使用启动模式与调试工具,以优化多任务体验。

相关文章

  • 【原创】Activity个人总结

    Activity任务栈 Android中管理Activity的方式:Activity任务栈Activity的四种状...

  • Activity的启动与管理之图记表查

    Activity的管理——任务栈 任务栈 Android Task 是用来存放Activity实例的容器,Andr...

  • Activity-四种启动模式及使用方法

    一、任务栈(或叫回退栈) 说到Activity的启动模式,必须先了解Activity的任务栈。 android任务...

  • Activity

    文章参考 Android Activity 完全解析,Android【安卓】Activity详解。仅方便个人记忆。...

  • 2018-04-11

    Android之Activity系列总结(二)--任务和返回栈 任务和返回栈 应用通常包含多个Activity。每...

  • Activity的启动模式

    Activity的启动模式 任务栈 Android是以栈来管理多个Activity的,根据后进先出的原则,当切换到...

  • android - Activity 的启动模式和标记位

    android-Activity 的启动模式和标记位 Activity 启动过程涉及到的几个概念 任务栈:任务栈又...

  • Android - activity基础

    Android以栈的形式管理activity。 活动状态 1.运行状态:栈顶的activity2.暂停状态:不是处...

  • Activity栈

    Activity栈 android系统使用栈的方式对activity进行管理: 采用后进先出原则,新访问的acti...

  • Android基础回顾之Activity

    Activity: 是与用户交互的接口,Android系统是通过Activity栈的形式来管理Activity 1...

网友评论

      本文标题:Android Activity栈关系解析

      本文链接:https://www.haomeiwen.com/subject/hytxmjtx.html