一、ActivityTaskSupervisor介绍
ActivityTaskSupervisor是Android系统中的一个关键类,负责管理和调度Activity的任务栈。它是ActivityManagerService的一部分,负责处理Activity的启动、切换、关闭等操作。
ActivityTaskSupervisor的主要功能包括:
-
管理任务栈:ActivityTaskSupervisor维护了一个任务栈列表,每个任务栈包含多个Activity实例。它负责创建、销毁和管理任务栈,以及处理任务栈之间的切换。
-
启动Activity:当启动一个新的Activity时,ActivityTaskSupervisor负责确定Activity所属的任务栈,并将其添加到相应的任务栈中。它还会处理Activity的启动模式,如singleInstance、singleTask和singleTop等。
-
切换Activity:当用户切换到另一个Activity时,ActivityTaskSupervisor负责将当前Activity置于后台,并将目标Activity置于前台。它还会处理Activity的切换动画和生命周期回调。
-
关闭Activity:当关闭一个Activity时,ActivityTaskSupervisor负责从任务栈中移除该Activity,并根据需要销毁任务栈。它还会处理Activity的关闭动画和生命周期回调。
-
任务栈调度: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博客