本文主要内容
startActivityForResult 使用场景是什么? requestCode、 resultCode 含义是什么?
A 启动 B ,B 中何时执行 setResult ? setResult 是否可以位于 finish 之后?
1.startActivityForResult 使用场景是什么? requestCode、 resultCode 含义是什么?
startActivityForResult使用场景:
需要从新开启的Actiivty中获取到数据;比如拍照,选择联系人等;
注意
- 如果被启动的ActivtyForResult是singleTask模式,onActivityForResult()方法回立即执行;
- startActivityForResult ()方法在onCreate()或onResume()方法中被调用,直到结果返回前该Activity都不会展现;
requestCode:
requestCode 必须大于或等于0,否则sendMessage(H.SEND_RESULT, res)方法不会执行
resultCode:
结果调用传回原Activity中,通常RESULT_CANCELED,RESULT_OK,RESULT_FIRST_USER;
2.A 启动 B ,B 中何时执行 setResult ? setResult 是否可以位于 finish 之后?
setResult()方法放在finish()方法之前执行,一般置于onCreate()或者onResume()方法中;
private void finish(int finishTask) {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
if (false) Log.v(TAG, "Finishing self: token=" + mToken);
try {
if (resultData != null) {
resultData.prepareToLeaveProcess(this);
}
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData, finishTask)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
}
从finish()源码中可以看到finish()方法中有对resultCode以及resultData的操作;因此不能将setResult方法放在finish()方法之后;