1. startActivityForResult的使用场景是什么?onActivityResult回调里面的resultCode和requestCode含义是什么?
当A activity打开B activity时,需要从B activity返回数据给A activity时,必须调用startActivityForResult。
requestCode:请求码。请求码的值是根据业务需求由自己决定,用来标识请求的来源。确定返回的数据是来自哪个activity。
resultCode:结果码。决定返回结果的类型,一般为系统默认的RESULT_OK或者RESULT_CANCELED
2. Activity A启动B的时候,在B中何时该执行setResult ?setResult可以位于Activity的finish方法之后吗?
public final void setResult(int resultCode, Intent data) {
synchronized (this) {
mResultCode = resultCode;
mResultData = data;
}
}
......................
public void finish() {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken);
try {
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
}
- 从Activity中看出finish()里的resultCode和resultData的值是在setResult调用后才获取的,不然值会为空。
- 所以setResult一般是在onBackPressed中调用,而且必须是在super.onBackPressed()之前。或者根据业务情景,显示调用setResult,然后finish()。