【startactivityforresult(返回)】在 Android 开发中,`startActivityForResult` 是一个常用的 API,用于启动另一个 Activity,并期望从该 Activity 获取返回结果。开发者通过此方法可以实现跨 Activity 的数据传递与交互。以下是对 `startActivityForResult` 返回机制的总结。
一、功能概述
`startActivityForResult` 允许当前 Activity 启动另一个 Activity,并在该 Activity 结束后接收其返回的数据。这种方式常用于需要用户进行选择或输入后返回结果的场景,如拍照、选择图片、填写表单等。
二、使用流程
| 步骤 | 操作 | 说明 |
| 1 | 调用 `startActivityForResult(Intent intent, int requestCode)` | 当前 Activity 启动目标 Activity,传入请求码(requestCode) |
| 2 | 目标 Activity 完成操作后调用 `setResult(int resultCode, Intent data)` | 设置返回结果,包含结果码和数据 |
| 3 | 目标 Activity 调用 `finish()` 结束自身 | 通知系统该 Activity 已完成 |
| 4 | 当前 Activity 收到 `onActivityResult(int requestCode, int resultCode, Intent data)` 回调 | 处理返回结果 |
三、关键参数说明
| 参数名 | 类型 | 说明 |
| `requestCode` | int | 请求码,用于标识是哪个 Activity 返回的结果 |
| `resultCode` | int | 结果码,通常为 `RESULT_OK` 或 `RESULT_CANCELED` |
| `data` | Intent | 返回的数据对象,可携带额外信息 |
四、注意事项
- 生命周期管理:确保在 `onActivityResult` 中处理数据,避免因 Activity 重启导致数据丢失。
- 结果码一致性:应统一使用标准结果码(如 `RESULT_OK`)以提高代码可读性。
- 兼容性问题:在 Android 11 及以上版本中,部分权限和数据传递方式可能发生变化,需注意适配。
五、示例代码
启动 Activity:
```java
Intent intent = new Intent(this, TargetActivity.class);
startActivityForResult(intent, 1001);
```
在 TargetActivity 中设置返回结果:
```java
Intent resultIntent = new Intent();
resultIntent.putExtra("key", "value");
setResult(RESULT_OK, resultIntent);
finish();
```
在原 Activity 中处理返回结果:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1001 && resultCode == RESULT_OK) {
String value = data.getStringExtra("key");
// 处理返回值
}
}
```
六、总结
`startActivityForResult` 是 Android 中实现 Activity 间通信的重要手段。合理使用该方法可以提升应用的交互体验。开发时需要注意请求码、结果码的正确使用,以及对不同 Android 版本的兼容性处理。随着 Android 新版本的推出,虽然 `startActivityForResult` 逐渐被 `ActivityResultLauncher` 替代,但在旧项目中仍广泛使用。


