ActivityStackSupervisor.java关键信息解读

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

今天先分析到这里了,下班。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值