Android ActivityTaskSupervisor

一、ActivityTaskSupervisor介绍

ActivityTaskSupervisor是Android系统中的一个关键类,负责管理和调度Activity的任务栈。它是ActivityManagerService的一部分,负责处理Activity的启动、切换、关闭等操作。

ActivityTaskSupervisor的主要功能包括:

  1. 管理任务栈:ActivityTaskSupervisor维护了一个任务栈列表,每个任务栈包含多个Activity实例。它负责创建、销毁和管理任务栈,以及处理任务栈之间的切换。

  2. 启动Activity:当启动一个新的Activity时,ActivityTaskSupervisor负责确定Activity所属的任务栈,并将其添加到相应的任务栈中。它还会处理Activity的启动模式,如singleInstance、singleTask和singleTop等。

  3. 切换Activity:当用户切换到另一个Activity时,ActivityTaskSupervisor负责将当前Activity置于后台,并将目标Activity置于前台。它还会处理Activity的切换动画和生命周期回调。

  4. 关闭Activity:当关闭一个Activity时,ActivityTaskSupervisor负责从任务栈中移除该Activity,并根据需要销毁任务栈。它还会处理Activity的关闭动画和生命周期回调。

  5. 任务栈调度:ActivityTaskSupervisor根据一定的策略和优先级,对任务栈进行调度和管理。它可以根据任务栈的优先级、任务栈中Activity的状态等因素,决定哪个任务栈处于前台,哪个任务栈处于后台。

二、ActivityTaskSupervisor相关类

ActivityTaskSupervisor

ActivityTaskSupervisor是Android系统中的一个关键组件,负责管理应用程序的Activity任务栈。它负责跟踪和管理应用程序中的Activity实例,并根据系统的需求来调度它们的生命周期。

ActivityTaskSupervisor文件路径:

frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java

ActivityTaskSupervisor定义:

public class ActivityTaskSupervisor implements RecentTasks.Callbacks {}

ClientLifecycleManager

Class that is able to combine multiple client lifecycle transition requests and/or callbacks, and execute them as a single transaction.

能够组合多个客户端生命周期转换请求和/或回调,并将它们作为单个事务执行的类。

ClientLifecycleManager文件路径:

frameworks/base/services/core/java/com/android/server/wm/ClientLifecycleManager.java

ClientLifecycleManager定义:

class ClientLifecycleManager {}

ClientTransactionItem

可以调度和执行的客户端回调消息。这些示例可能包括活动配置更改、多窗口模式更改、活动结果交付等。

ClientTransactionItem文件路径:

frameworks/base/core/java/android/app/servertransaction/ClientTransactionItem.java

ClientTransactionItem定义:

public abstract class ClientTransactionItem implements BaseClientRequest, Parcelable {}

LaunchActivityItem

LaunchActivityItem是一个类,它是Android框的一个关键组件,用于处理启动Activity的操作。当根Activity启动时,会执行ActivityItem的execute方法。在ActivityThread类handleStartActivity方法中,会调用LaunchActivityI的execute方法来启动Activity。

LaunchActivityItem文件路径:

frameworks/base/core/java/android/app/servertransaction/LaunchActivityItem.java

LaunchActivityItem定义:

public class LaunchActivityItem extends ClientTransactionItem {}

ActivityTransactionItem

ActivityTransactionItem是一个用于传递给Activity的事务项。它包含了要传递给Activity的具体数据和操作。

ActivityTransactionItem文件路径:

frameworks/base/core/java/android/app/servertransaction/ActivityTransactionItem.java

ActivityTransactionItem定义:

public abstract class ActivityTransactionItem extends ClientTransactionItem {}

ActivityResultItem

Activity result delivery callback.

活动结果投递回调。

ActivityResultItem文件路径:

frameworks/base/core/java/android/app/servertransaction/ActivityResultItem.java

ActivityResultItem定义:

public class ActivityResultItem extends ActivityTransactionItem {}

ActivityRelaunchItem

ActivityRelaunchItem是一个类,用于描述Activity重新启动的信息。它包含了重新启动Activity所需的各种参数和状态。

ActivityRelaunchItem文件路径:

frameworks/base/core/java/android/app/servertransaction/ActivityRelaunchItem.java

ActivityRelaunchItem定义:

public class ActivityRelaunchItem extends ActivityTransactionItem {}

ActivityLifecycleItem

Request for lifecycle state that an activity should reach.

请求活动应达到的生命周期状态。

ActivityLifecycleItem文件路径:

frameworks/base/core/java/android/app/servertransaction/ActivityLifecycleItem.java

ActivityLifecycleItem定义:

public abstract class ActivityLifecycleItem extends ActivityTransactionItem {}

StartActivityItem

Android StartActivityItem是Android中用于启动Activity的一个类。它包含了启动Activity所需的各种信息,例如Intent、ActivityInfo等。在Android系统中,当我们调用startActivity方法启动一个Activity时,实际上是创建了一个StartActivityItem对象,并将其传递给ActivityManagerService来处理。

StartActivityItem类的关键代码可以在ActivityStarter类的startActivity方法中找到。在这个方法中,会根据传入的Intent和ActivityInfo进行判断和处理,如果找不到指定的Activity类,则会将错误码设置为START_CLASS_NOT_FOUND。

另外,在ActivityManagerService的attachApplicationLocked方法中,也会执行一些关键逻辑,包括通过IApplicationThread回到App进程中创建Application实例并回调onCreate方法,以及调用ActivityTaskManagerService的attachApplication方法来启动首页Activity。这些方法最终会调用到ActivityStackSupervisor的realStartActivityLocked方法。

StartActivityItem文件路径:

frameworks/base/core/java/android/app/servertransaction/StartActivityItem.java

StartActivityItem定义:

public class StartActivityItem extends ActivityLifecycleItem {}

ResumeActivityItem

ResumeActivityItem是Android中的一个类,用于表示在ActivityThread中处理恢复(resume)Activity的操作。它是ActivityThread中的一个内部类,用于处理Activity的生命周期事件。

在ActivityThread中,当一个Activity需要被恢复时,会创建一个ResumeActivityItem对象,并将其添加到消息队列中。当消息队列中的消息被处理时,会调用ResumeActivityItem的execute方法来执行恢复Activity的操作。

ResumeActivityItem的execute方法会调用Activity的performResume方法,该方法会执行一系列的操作,包括调用Activity的onResume方法、执行Activity的可见性变更操作等。

ResumeActivityItem文件路径:

frameworks/base/core/java/android/app/servertransaction/ResumeActivityItem.java

ResumeActivityItem定义:

public class ResumeActivityItem extends ActivityLifecycleItem {}

PauseActivityItem

Request to move an activity to paused state.

请求将活动移动到暂停状态。

PauseActivityItem文件路径:

frameworks/base/core/java/android/app/servertransaction/PauseActivityItem.java

PauseActivityItem定义:

public class PauseActivityItem extends ActivityLifecycleItem {}

StopActivityItem

Request to move an activity to stopped state.

请求将活动移动到停止状态。

StopActivityItem文件路径:

frameworks/base/core/java/android/app/servertransaction/StopActivityItem.java

StopActivityItem定义:

public class StopActivityItem extends ActivityLifecycleItem {}

DestroyActivityItem

Request to destroy an activity.

请求销毁活动。

DestroyActivityItem文件路径:

frameworks/base/core/java/android/app/servertransaction/DestroyActivityItem.java

DestroyActivityItem定义:

public class DestroyActivityItem extends ActivityLifecycleItem {}

三、ActivityTaskSupervisor相关流程分析

ActivityTaskSupervisor realStartActivityLocked流程分析

Android13 ActivityTaskSupervisor realStartActivityLocked流程分析-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值