
Android中如何通过SetResult打开并返回Activity结果
下载需积分: 10 | 1.29MB |
更新于2025-03-03
| 27 浏览量 | 举报
收藏
在Android开发中,Activity之间的通信是一个常见的需求。特别是在执行“打开Activity”的操作后,往往需要从被打开的Activity获取返回结果,并据此进行相应的逻辑处理。这涉及到Android的Intent机制和Activity的生命周期管理。
### Intent在Activity返回结果中的作用
Intent是Android中用于不同组件之间进行交互的一种机制。它不仅可以启动Activity,还可以携带数据。当一个Activity A启动另一个Activity B时,如果需要从Activity B中获取返回结果,通常会在Activity A中创建一个Intent对象,并启动Activity B。Activity B执行完毕后,可以通过调用`setResult`方法来返回结果数据,然后通过`finish`方法结束自己,返回到Activity A。Activity A通过覆写`onActivityResult`方法来接收返回的数据。
### Activity的生命周期与返回结果
Activity的生命周期涉及到了几个关键的方法:`onCreate()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroy()`等。当从Activity A打开Activity B时,Activity B的生命周期方法将依次被调用。Activity B在准备结束返回到Activity A时,会调用`setResult`方法设置返回结果,并调用`finish()`方法结束Activity B。此时,Activity B的生命周期进入`onDestroy()`,而Activity A的生命周期则在`onResume()`之前,通过`onActivityResult`方法接收到返回的结果。
### 具体实现步骤
1. **启动Activity B并传递数据**:
在Activity A中,使用Intent启动Activity B,并通过`putExtra`方法传递需要的数据。
```java
Intent intent = new Intent(this, ActivityB.class);
intent.putExtra("key", value); // 传递数据
startActivityForResult(intent, REQUEST_CODE); // REQUEST_CODE是一个自定义的请求码
```
2. **在Activity B中设置返回结果**:
在Activity B中,需要覆写`onBackPressed()`或在适当的时机调用`setResult()`来返回数据。
```java
// 设置返回结果
Intent resultIntent = new Intent();
resultIntent.putExtra("result_key", result_value); // 结果数据
setResult(RESULT_OK, resultIntent);
finish(); // 结束Activity B
```
3. **在Activity A中接收返回结果**:
Activity A需要覆写`onActivityResult`方法来接收返回的结果。
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
if (resultCode == RESULT_OK) {
String result = data.getStringExtra("result_key"); // 获取返回的数据
// 根据返回的数据进行逻辑处理
}
}
}
```
### 注意事项
- **请求码和结果码**:在`startActivityForResult`方法中指定的请求码(REQUEST_CODE)是必须的,它用于识别请求来源,以便在`onActivityResult`中区分处理不同来源的结果。`RESULT_OK`和`RESULT_CANCELED`是Activity B结束时通常会返回的结果码,`RESULT_OK`表示有返回结果,`RESULT_CANCELED`表示请求被取消或者没有返回结果。
- **数据传递限制**:传递的数据需要是可序列化的(Serializable)或者实现了Parcelable接口的数据类型。Intent传递数据有大小限制,一般不建议传递大量数据,否则可能会导致崩溃。
- **异步处理**:如果Activity B中的某些操作需要时间(如网络请求或大量数据处理),应考虑将这些操作放在异步线程中执行,避免阻塞UI线程。
- **错误处理**:在Activity B中,若无法正常提供返回结果,需要妥善处理异常情况,确保不会造成程序崩溃。
通过上述知识点,我们可以清晰地理解在Android开发中如何实现Activity间的返回结果通信,从而有效地管理和处理Activity间的数据交换。这对于构建一个流畅的用户界面和实现复杂的业务逻辑非常关键。
相关推荐


















帅气的东哥
- 粉丝: 1212
最新资源
- QQ号码凶吉测试算法分析与ASP数据库操作示例
- MyRecover v0.05:优化分块算法实现超大数据库文件恢复
- 探索Microsoft SQL Server 2005 JDBC驱动程序1.2
- JUnit实践:自动测试框架应用指南
- 178网址美化版v1.0:无广告且界面精美的网站套件
- 几何学课件FLA代码资源下载与使用指南
- IP存储网络技术深度解析
- JSP动态网站开发附录代码及实用学习指南
- 无哩头BT小偷源码构建与下载指南
- 掌握Windows编程:《Programming Windows》源码详解
- 汉化版站点排行程序Top Sites Professional 3.05发布
- 复刻Winamp:用VB打造功能相似的多媒体播放器源码
- Hao521网址之家静态版源码下载
- VB.net写字板应用开发进度及工具要求
- 网上邮政项目功能与建设全面解析
- Visual C++ 2005与C#开发者的实战指南
- 简化操作:深入理解jxl库的Excel文件处理
- ActiveTreeView: 数据库界面展示的优选控件
- 9om PHP Dict v1.0:英汉双解字典及注册工具
- XX市综合信息网建设方案:CISCO DPT技术实现高速IP网络
- 通宵制作的FLASH播放器:源码及软件下载
- 一摘天下小:多用户网摘书签系统v1.1发布
- 心梦网页特效精灵5.5 XP完美版全集下载
- 比利商务全站系统:电子购物解决方案