【发布时间】:2016-08-25 05:36:16
【问题描述】:
我花费大量时间试图弄清楚每次您在活动中使用startActivityForResult() 并期待结果时如何调用onActivityResult() 方法。所以我四处寻找,我能够找到称为onActivityResult() 的方法。
但是,让我感到困惑的是 who 变量必须为 null 才能调用 onActivityResult()。我认为who 变量代表返回结果的活动或调用结果的活动。现在,如果who = null 那么为什么要调用 onActivityResult() ,因为没有人需要交付结果,也不存在任何生成结果的活动。那么谁能向我解释为什么who = null?
来源
6185 public void dispatchActivityResult(String who, int requestCode,
6186 int resultCode, Intent data) {
6187 if (false) Log.v(
6188 TAG, "Dispatching result: who=" + who + ", reqCode=" + requestCode
6189 + ", resCode=" + resultCode + ", data=" + data);
6190 mFragments.noteStateNotSaved();
6191 if (who == null) {
6192 onActivityResult(requestCode, resultCode, data);
6193 } else {
6194 Fragment frag = mFragments.findFragmentByWho(who);
6195 if (frag != null) {
6196 frag.onActivityResult(requestCode, resultCode, data);
6197 }
6198 }
6199 }
证明谁代表调用 startActivityForResult() 的活动。
方法startActivityForResult():
public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {
3744 if (mParent == null) {
3745 Instrumentation.ActivityResult ar =
3746 mInstrumentation.execStartActivity(
3747 this, mMainThread.getApplicationThread(), mToken, this,
3748 intent, requestCode, options);
3749 if (ar != null) {
3750 mMainThread.sendActivityResult(
3751 mToken, mEmbeddedID, requestCode, ar.getResultCode(),
3752 ar.getResultData());
3753 }
您可以看到 execStartActivity 有 this,这是作为 who 传递给它的当前活动。
public ActivityResult execStartActivity(
1475 Context who, IBinder contextThread, IBinder token, Activity target,
1476 Intent intent, int requestCode, Bundle options)
【问题讨论】: