IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Activity栈管理相关类 -> 正文阅读

[移动开发]Activity栈管理相关类

Activity栈管理 有助于理解Activity启动流程

Activity在AMS 中存在的形式为ActivityRecord;

AMS以Task的方式管理Activity,Task在AMS存在的形式为TaskRecord

TaskRecord在AMS中依靠ActivityStack去管理

ActivityStack同样有管理者,ActivityStackSupervisor负责管理ActivityStack

主要涉及四个类

  • ActivityRecord

  • 存在历史栈的一个实例,代表一个Activity。

  • TaskRecord

  • 真正的Activity栈,内部维护一个ArrayList

  • ActivityStack 栈的结构类

  • 并不是一个Activity栈,严格意义上来说TaskRecord才是Activity栈,这个类负责管理各个TaskRecord,内部维护了一个ArrayList
    +

  • ActivityStackSupervisor

  • 内部持有一个ActivityStack,而ActivityStack内部也持有ActivityStackSupervisor,相当于ActivityStack的辅助管理类

ActivityRecord

ActivityRecord是Activity在AMS中的存在形式,ActivityRecord保存了Activity的信息。

final class ActivityRecord {
    TaskRecord task;  // 自己所在的TaskRecord,这样查找就不需要通过遍历所有的TaskRecord
    int theme;//主题
    int launchMode;//启动模式
    ...
}

TaskRecord

AMS以Task的方式在管理Activity,Android把用户一次操作相关的Activity按照先后顺序保存在一个Task中,这个Task在AMS中的存在形式就是TaskRecord;

TaskRecord中的mActivities是一个栈,它的作用是以栈的方式组织管理Activity。

final class TaskRecord {
  ...........
  final int taskId;       // Unique identifier for this task.
  int mAffiliatedTaskId; // taskId of parent affiliation or self if no parent.
  // 是指root activity的affinity,即该Task中第一个Activity; 可以理解为当前task的name;
  String affinity;        // The affinity name for this task, or null; may change identity.
  // 启动这个task的intent
  Intent intent;          // The original intent that started the task.
  // task模式
  int mLockTaskMode;      // Which tasklock mode to launch this task in. One of
                           // ActivityManager.LOCK_TASK_LAUNCH_MODE_*
  // 该Task中所有的Activity
  final ArrayList<ActivityRecord> mActivities;
  // 管理该Task的ActivityStack,
  ActivityStack stack;

  // 最近列表中,可以看到当前Task的缩略图
  private Bitmap mLastThumbnail; // Last thumbnail captured for this item.
  private final File mLastThumbnailFile; // File containing last thumbnail.

  final ActivityManagerService mService;
  ..........
}

ActivityStack

TaskRecord的管理类

final class ActivityStack {
   private final ArrayList<TaskRecord> mTaskHistory = new ArrayList<>(); //ActivityStack中所有的TaskRecord
    private final ArrayList<ActivityRecord> mLRUActivities = new ArrayList<>();//最近活动过的ActivityRecord
    ......  
    final int mStackId;  //ActivityStack的唯一标识
    final ActivityContainer mActivityContainer;
    /** The other stacks, in order, on the attached display. Updated at attach/detach time. */
    ArrayList<ActivityStack> mStacks; //绑定的ActivityDisplay中的所有ActivityStack
    /** The attached Display's unique identifier, or -1 if detached */
    int mDisplayId;//绑定的ActivityDisplay的id,默认为Display.DEFAULT_DISPLAY = 0;
    ......  
    //ActivityStack的管理者ActivityStackSupervisor,通过其运行所有的ActivityStacks  
    final ActivityStackSupervisor mStackSupervisor;
    ActivityStack(ActivityStackSupervisor.ActivityContainer activityContainer, RecentTasks recentTasks) {
        mStackSupervisor = activityContainer.getOuter();
        ...
    }
}

ActivityStackSupervisor

ActivityStackSupervisor 用于管理ActivityStack;ActivityStackSupervisor为AMS提供管理方法;管理着系统中的三个ActivityStack;

public final class ActivityStackSupervisor {
    //mHomeStack管理的是Launcher相关的Activity栈
    private ActivityStack mHomeStack;
	//mFocusedStack管理的是当前显示在前台Activity的Activity栈;
    private ActivityStack mFocusedStack;

    /** 保存上一次显示在前台的Activity栈 */
    private ActivityStack mLastFocusedStack;
        /** List of activities that are waiting for a new activity to become visible before completing
     * whatever operation they are supposed to do. */
    final ArrayList<ActivityRecord> mWaitingVisibleActivities = new ArrayList<ActivityRecord>();

    /** List of processes waiting to find out about the next visible activity. */
    final ArrayList<IActivityManager.WaitResult> mWaitingActivityVisible =
            new ArrayList<IActivityManager.WaitResult>();

    /** List of processes waiting to find out about the next launched activity. */
    final ArrayList<IActivityManager.WaitResult> mWaitingActivityLaunched =
            new ArrayList<IActivityManager.WaitResult>();

    /** List of activities that are ready to be stopped, but waiting for the next activity to
     * settle down before doing so. */
    final ArrayList<ActivityRecord> mStoppingActivities = new ArrayList<ActivityRecord>();

    /** List of activities that are ready to be finished, but waiting for the previous activity to
     * settle down before doing so.  It contains ActivityRecord objects. */
    final ArrayList<ActivityRecord> mFinishingActivities = new ArrayList<ActivityRecord>();

    /** List of activities that are in the process of going to sleep. */
    final ArrayList<ActivityRecord> mGoingToSleepActivities = new ArrayList<ActivityRecord>();
    ......    
    /** Mapping from (ActivityStack/TaskStack).mStackId to their current state */
    private SparseArray<ActivityContainer> mActivityContainers = new SparseArray<ActivityContainer>();//以mStackId为key

    /** Mapping from displayId to display current state */
    private final SparseArray<ActivityDisplay> mActivityDisplays =
            new SparseArray<ActivityDisplay>();//以displayId为key
}

ActivityDisplay

是ActivityContainer内部类

可以理解成为一个屏幕,保存着该屏幕的ActivityStack的数组mStacks,并对其进行管理操作。同时也保存了该屏幕下单特殊ActivityStatck,如mHomeStack、mRecentsStack、mPinnedStack、mSplitScreenPrimaryStack。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:39:38  更:2021-09-04 17:41:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:48:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码