ActivityStackSupervisor.java的声明如下:
public final class ActivityStackSupervisor implements DisplayListener {}
ActivityStackSupervisor是AMS重要的实现,是Android系统Activity的栈管理器,管理着两个重要的Activity栈,实际上Android 早期不是这样的,4.4以前只有一个mHistory 来管理所有的 activity;目前的栈架构是Android4.4之后采用的,当然这个是Android系统默认的栈架构,高通和MTK等芯片产商为了增加新feature有可能在这里新增一个或者多个栈,比如Multi-window的实现,就有可能需要增加栈来管理更复杂的Activity。
首先关注以下两个成员变量:
/** The stack containing the launcher app. Assumed to always be attached to
* Display.DEFAULT_DISPLAY. */
ActivityStack mHomeStack;
/** The stack currently receiving input or launching the next activity. */
ActivityStack mFocusedStack;
默认情况下,AMS使用这两个栈完成系统全部的Activity的管理和调度。其中mHomeStack管理的是Launcher相关的任务,包括Launcher、RecentTask,Keyguad,除了上述以外的任务都归mFocusedStack管理。
我们先关注一下ActivityStackSupervisor 实例是什么是创建的,在ActivityManagerService内可以看到如下的定义:
/** Run all ActivityStacks through this */
final ActivityStackSupervisor mStackSupervisor;
mStackSupervisor是在ActivityManagerService的构造函数内创建的,源码如下:
// Note: This method is invoked on the main thread but may need to attach various
// handlers to other threads. So take care to be explicit about the looper.
public ActivityManagerService(Context systemContext) {
。。。。。。。。。。。。。。。。。。
mStackSupervisor = new ActivityStackSupervisor(this);
mActivityStarter = new ActivityStarter(this, mStackSupervisor);
mRecentTasks = new RecentTasks(this, mStackSupervisor);
。。。。。。。。。。。。。。。。。。。。。
}
后面我们分析整个栈管理的顺利依次如下:
ActivityManagerService-->ActivityStack->TaskRecord->ActivityRecord
今天先分析到这里了,下班。