本文首发于微信公众号「刘望舒」
关联系列
Android系统启动流程系列
Android应用进程系列
Android深入四大组件系列
Android深入解析AMS系列
前言
关于AMS,原计划是只写一篇文章来介绍,但是AMS功能繁多,一篇文章的篇幅远远不够。这一篇我们接着来学习与AMS相关的ActivityTask和Activity栈管理。
1.ActivityStack
ActivityStack是一个管理类,用来管理系统所有Activity的各种状态,其内部维护了TaskRecord的列表,因此从Activity任务栈这一角度来说,ActivityStack也可以理解为Activity堆栈。它由ActivityStackSupervisor来进行管理的,而ActivityStackSupervisor在AMS中的构造方法中被创建。
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
public ActivityManagerService(Context systemContext) {
...
mStackSupervisor = new ActivityStackSupervisor(this);
...
}
1.1 ActivityStack的实例类型
ActivityStackSupervisor中有多种ActivityStack实例,如下所示。
frameworks/base/services/core/java/com/android/server/am/ActivityStackSupervisor.java
public final class ActivityStackSupervisor implements DisplayListener {
...
ActivityStack mHomeStack;
ActivityStack mFocusedStack;
private ActivityStack mLastFocusedStack;
...
}
mHomeStack用来存储Launcher App的所有Activity,mFocusedStack表示当前正在接收输入或启动下一个Activity的所有Activity。mLastFocusedStack表示此前接收输入的所有Activity。
通过ActivityStackSupervisor提供了获取上述ActivityStack的方法,比如要获取mFocusedStack,只需要调用ActivityStackSupervisor的getFocusedStack方法就可以了:
frameworks/base/services/core/java/com/android/server/am/ActivityStackSupervisor.java
ActivityStack getFocusedStack() {
return mFocusedStack;
}
1.2 ActivityState
ActivityStack中通过枚举存储了Activity的所有的状态,如下所示。
frameworks/base/services/core/java/com/android/server/am/ActivityStack.java
enum ActivityState {
INITIALIZING,
RESUMED,
PAUSING,
PAUSED,
STOPPING,
STOPPED,
FINISHING,
DESTROYING,
DESTROYED
}
通过名称我们可以很轻易知道这些状态所代表的意义。应用ActivityState的场景会有很多,比如下面的代码:
frameworks/base/services/

本文深入解析Android的ActivityTask和Activity栈管理,涵盖ActivityStack的实例类型、ActivityState、特殊状态Activity及栈管理中的Launch Mode、Intent FLAG和taskAffinity。了解这些概念有助于更好地理解和控制Android应用的Activity行为。
409

被折叠的 条评论
为什么被折叠?



