在Android的Activity中,我们经常使用startActivityForResult启动另外一个Activity,例如从Activity A启动 Activity B,那B何时调用setResult合适,能不能再finish()之后调用?
在这里做一下记录。
直接看下Activity的源码 setResult()
和 finish()
两个方法
public final void setResult(int resultCode, Intent data) {
synchronized (this) {
mResultCode = resultCode;
mResultData = data;
}
}
private void finish(int finishTask) {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
try {
if (resultData != null) {
resultData.prepareToLeaveProcess(this);
}
if (ActivityManager.getService()
.finishActivity(mToken, resultCode, resultData, finishTask)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
...
}
setResult()
比较简单就是设置 mResultCode 和 mResultData 两个变量;
在finish()
中对resultData 进行了处理并且调用了ActivityManager.getService().finishActivity(),结束了Activity。
直接看下上面的关系,可见 mResultCode 和 mResultData的设置必须在finish()
之前。
同理setResult()
必须在finish()
之前。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/app/6283.html