startActivityLocked 源码分析
时间: 2023-06-24 13:03:49 浏览: 61
`startActivityLocked` 是 Android 系统中 Activity 启动流程的核心方法之一,具体实现在 ActivityManagerService.java 中。该方法的作用是启动一个 Activity,可以是新建的 Activity,也可以是已经存在的 Activity,且支持不同启动模式。下面我们来分析它的源码实现。
首先,`startActivityLocked` 方法会根据是否为新建 Activity 分别进行处理,即通过 `getOrCreateActivity` 方法获得或创建 ActivityRecord 实例。如果该 Activity 已经存在并且不是 singleInstance 启动模式,则会将该 Activity 移动到栈顶,否则不移动。
接下来,会判断是否需要启动新的 Activity。如果需要,会通过 `ActivityStarter` 类启动新的 Activity。`ActivityStarter` 类是 Activity 启动流程的关键类,负责启动 Activity 的前置准备工作,比如权限检查、Intent 解析、Activity 栈的处理等。
如果需要启动新的 Activity,则 ActivityManagerService 会启动一个新的进程,并将 ActivityRecord 加入到新进程的 ActivityStack 中。在启动新进程时,会调用 `startProcessLocked` 方法,该方法会创建一个新的进程并启动 ActivityThread,然后将 ActivityStack 加入到新进程中。
最后,`startActivityLocked` 方法会返回启动的 Activity 的 token。
总之,`startActivityLocked` 是 Android 系统中 Activity 启动流程的核心方法之一,实现了新建 Activity 和启动 Activity 的功能,并通过 `ActivityStarter` 类对 Activity 启动流程进行了前置准备工作。