startActivityLocked 源码解析
时间: 2023-06-24 17:04:08 浏览: 115
`startActivityLocked` 是 Android Framework 中的一个核心方法,用于启动新的 Activity。这个方法定义在 `ActivityStackSupervisor` 类中。
下面是 `startActivityLocked` 方法的源码:
```java
final ActivityRecord startActivityLocked(ActivityRecord r,
ActivityRecord focusedTopActivity, boolean newTask, boolean keepCurTransition,
ActivityOptions options) {
if (r == null) {
if (DEBUG_STACK) Slog.v(TAG_STACK, "startActivityLocked: r=null");
return null;
}
// 获取任务栈
final TaskRecord task = r.getTask();
if (task != null && task.getStack() == null) {
// 确保任务所在栈存在
if (!createStackOnDisplay(task, task.getLaunchDisplayId())) {
return null;
}
}
// ...
}
```
首先,方法会检查传入的 `ActivityRecord` 是否为 `null`,如果为 `null`,则直接返回 `null`。
然后,方法会获取 `ActivityRecord` 所属的任务栈,如果任务所属的栈不存在,则会尝试在指定的显示器上创建一个新的栈。
接下来的代码中,会检查传入的 `ActivityRecord` 是否可以启动。如果可以启动,则会将新的 `ActivityRecord` 添加到任务栈中,并根据传入的参数决定是否保留当前的过渡动画。
最后,方法会返回新的 `ActivityRecord` 对象,用于后续的操作。
需要注意的是,`startActivityLocked` 方法是在 `ActivityStackSupervisor` 类中定义的,该类是 Android Framework 中与任务栈相关的核心类之一。在方法中,会涉及到任务栈的创建、任务栈中任务的启动、任务栈的管理等操作。因此,对这个方法的深入理解需要掌握 Android Framework 中任务栈的相关知识。
阅读全文