Android -startActivityForResult分析

本文主要内容

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()方法之后;

你可能感兴趣的:(Android -startActivityForResult分析)