返回
剖析Activity之setResult工作原理,揭秘数据回传过程
Android
2023-11-04 02:53:26
ActivityResult 机制概述
在Android开发中,startActivityForResult()方法是启动Activity并从被启动的Activity接收结果的常用方法。当您调用startActivityForResult()方法时,系统会创建一个新的Activity实例,并将请求代码(requestCode)和Intent对象作为参数传递给它。
当被启动的Activity销毁时,它可以使用setResult()方法将结果数据回传给启动它的Activity。setResult()方法有两个参数:resultCode和Intent对象。resultCode是一个整数,用于指示结果的状态。Intent对象用于携带结果数据。
setResult() 方法的详细分析
1. 语法结构
public void setResult(int resultCode, Intent data)
2. 参数说明
- resultCode :结果状态代码。可以是RESULT_OK、RESULT_CANCELED或任何自定义的代码。
- data :Intent对象,用于携带结果数据。
3. 工作原理
当您调用setResult()方法时,系统会将resultCode和Intent对象存储在被启动的Activity的ResultInfo对象中。当被启动的Activity销毁时,系统会将ResultInfo对象传递给启动它的Activity。
启动Activity可以通过onActivityResult()方法获取ResultInfo对象,从而获取resultCode和Intent对象。onActivityResult()方法的签名如下:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
- requestCode :与startActivityForResult()方法中指定的requestCode相对应。
- resultCode :与setResult()方法中指定的resultCode相对应。
- data :与setResult()方法中指定的Intent对象相对应。
4. 示例代码
// 在Activity A中
startActivityForResult(new Intent(this, ActivityB.class), REQUEST_CODE);
// 在Activity B中
Intent data = new Intent();
data.putExtra("result", "Hello from Activity B!");
setResult(RESULT_OK, data);
// 在Activity A中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
String result = data.getStringExtra("result");
// 处理结果数据
}
}
注意事项
- 如果您在setResult()方法中传递了一个Intent对象,那么您必须在onActivityResult()方法中使用相同类型的Intent对象来接收数据。
- 如果您在setResult()方法中传递了一个null值,那么onActivityResult()方法中的data参数将为null。
- 如果您在setResult()方法中传递了一个非法的resultCode值,那么系统会抛出IllegalArgumentException异常。
结论
setResult()方法是Activity之间传递数据的重要手段之一。通过理解setResult()方法的工作原理,您可以更好地掌握Activity之间的通信过程,并编写出更加健壮的Android应用程序。