ActivityStack类startActivityLocked方法解析

来源:互联网 发布:sql 没有权限 编辑:程序博客网 时间:2024/06/08 02:59

 方法定义如下:

final void startActivityLocked(ActivityRecord r, boolean newTask, boolean keepCurTransition,

            ActivityOptions options) 

这个方法的主要作用是Task和Activity的进栈处理

首先看下面这段代码:

        if (!r.mLaunchTaskBehind && (taskForIdLocked(taskId) == null || newTask)) {
            // Last activity in task had been removed or ActivityManagerService is reusing task.
            // Insert or replace.
            // Might not even be in.
            insertTaskAtTop(rTask, r);
            mWindowManager.moveTaskToTop(taskId);
        }

如果activity是以newTask的模式启动或者TASK堆栈中不存在该task id,task会重新入栈,并且放在栈的顶部。

在这里大家要搞明白,task先入栈,之后才是activity入栈,他们是包含关系。