startActivityMayWait 源码分析
时间: 2023-06-19 07:09:22 浏览: 48
`startActivityMayWait()` 是 Android 系统中的一个方法,用于启动一个 Activity。它的源码如下:
```java
public final ActivityClientRecord startActivityMayWait(IBinder token, Intent intent,
String resolvedType, IVoiceInteractionSession voiceSession, int resultWho, int requestCode,
ProfilerInfo profilerInfo, WaitResult outResult, Configuration config, Bundle bOptions) {
...
}
```
该方法主要的作用是启动一个 Activity,它的参数比较多,我们逐一分析一下:
- `token`: 用于标识启动该 Activity 的客户端,通常是调用者的 IBinder 对象。
- `intent`: 用于描述要启动的 Activity 的意图,通常包含了要启动的 Activity 的类名、所携带的数据等信息。
- `resolvedType`: 指定 Intent 的数据类型。
- `voiceSession`: 与语音识别相关的接口。
- `resultWho`: 用于标识返回结果的 Activity 的类名。
- `requestCode`: 用于标识 Activity 的请求码。
- `profilerInfo`: 用于性能分析。
- `outResult`: 用于保存启动结果。
- `config`: 用于指定 Activity 的配置信息。
- `bOptions`: 用于指定启动 Activity 的选项。
在 `startActivityMayWait()` 方法中,会根据 `intent` 中指定的类名,找到该 Activity 的 `ActivityInfo` 对象,并根据 `ActivityInfo` 中的 `launchMode` 属性来决定启动的方式。
如果 `launchMode` 是 `standard`,则会创建一个新的实例启动该 Activity,如果 `launchMode` 是 `singleTop`,则会检查当前 Activity 栈顶是否为该 Activity 的实例,如果是,则不会创建新的实例,而是直接调用该 Activity 的 `onNewIntent()` 方法传递新的 Intent。如果 `launchMode` 是 `singleTask`,则会检查当前 Activity 栈中是否已经存在该 Activity 的实例,如果存在,则将该 Activity 实例移到栈顶并调用其 `onNewIntent()` 方法,如果不存在,则创建一个新的实例并启动。如果 `launchMode` 是 `singleInstance`,则会创建一个新的 Activity 栈来管理该 Activity,并且该 Activity 的实例不会与其他 Activity 共享同一个栈。
最后,该方法会返回 `ActivityClientRecord` 对象,用于保存启动结果。