2024年3月14日发(作者:)

activity result api 原理

Activity Result API 原理

随着 Android 系统的不断更新,Activity 的启动方式也在不断演进。

在早期版本的 Android 系统中,我们通常使用

startActivityForResult() 方法来启动一个新的 Activity,并且在新的

Activity 中通过 setResult() 方法返回数据给调用方。但是这种方式存

在一些问题,例如:数据传递不稳定、代码冗余等。

为了解决这些问题,Google 在 Android 10 中推出了 Activity Result

API。该 API 可以帮助我们更方便、更稳定地启动一个新的 Activity,

并且可以轻松地处理返回结果。

1. 概述

Activity Result API 是一种用于管理 Activity 返回结果的 API。使用

该 API 可以简化启动 Activity 并处理返回结果的过程。

2. 使用场景

Activity Result API 主要应用于以下场景:

- 启动一个新的 Activity 并获取返回结果。

- 启动一个新的 Activity 并获取权限。

- 启动一个新的 Activity 并获取设备位置信息。

- 启动一个新的 Activity 并选择文件或图片等操作。

3. 使用方法

使用 Activity Result API 的主要步骤如下:

1. 在调用方(即启动 Activity 的地方)中注册回调函数。

```kotlin

registerForActivityResult(ctivityFor

Result()) { result ->

if (Code == RESULT_OK) {

// 处理返回结果

}

}

```

2. 在调用方中使用 Intent 启动目标 Activity。

```kotlin

val intent = Intent(this, TargetActivity::)

startActivityForResult(intent, REQUEST_CODE)

```

3. 在目标 Activity 中设置返回结果。

```kotlin

val resultIntent = Intent()

ra("key", "value")

setResult(RESULT_OK, resultIntent)

finish()

```

4. 在调用方中处理返回结果。

```kotlin

override fun onActivityResult(requestCode: Int, resultCode: Int,

data: Intent?) {

vityResult(requestCode, resultCode, data)

if (requestCode == REQUEST_CODE && resultCode ==

RESULT_OK) {

// 处理返回结果

}

}

```

4. 原理解析

Activity Result API 的实现原理主要是基于 ActivityResultRegistry

和 ActivityResultLauncher 两个类来完成的。

- ActivityResultRegistry:用于注册回调函数,并且管理所有的

Activity 返回结果。

- ActivityResultLauncher:用于启动目标 Activity,并且处理返回结

果。

当调用方注册回调函数时,Activity Result API 会自动创建一个唯一

的 RequestKey,并将该 RequestKey 注册到 ActivityResultRegistry

中。当目标 Activity 返回结果时,Activity Result API 会根据

RequestKey 找到对应的回调函数,并将返回结果传递给该回调函数

进行处理。

在启动目标 Activity 时,我们使用了

ctivityForResult() 方法来创建了一个

新的 ActivityResultLauncher 对象。该对象包含了一个 lambda 表达

式,用于处理目标 Activity 的返回结果。当目标 Activity 返回结果时,

会自动触发该 lambda 表达式进行处理。

5. 总结

通过使用 Activity Result API,我们可以更方便、更稳定地启动一个

新的 Activity 并处理返回结果。同时,该 API 也可以帮助我们简化代

码,减少冗余。虽然该 API 是在 Android 10 中推出的,但是它也可

以在较早版本的 Android 系统中使用。因此,建议开发者在开发过程

中尽可能使用 Activity Result API 来处理 Activity 的返回结果。