`
帅子
  • 浏览: 78073 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

由 onActivityResult 引发的血案

阅读更多
提示: onActivityResult 为活动基类Activity中的方法,用于获得子活动返回的数据,需要配合子活动的setResult和finish方法使用。那么onActivityResult 是在什么时候调用的呢,三者之间什么关系呢?

一、相关代码:
由此可见,setResult需在finish方法之前调用,用来设置返回数据,其关键在finish方法委托ActivityManagerNative.getDefault().finishActivity() 做内存回收、事件触发等工作。finish方法完全可以重载,resultCode 和resultData做为入参,Google的工程师也许是想代码更清晰吧,而且给setResult留有可扩展的余地。

public final void setResult(int resultCode) {
        synchronized (this) {
            mResultCode = resultCode;
            mResultData = null;
        }
    }


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);
        }
    }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics