Android setResult 的一点小问题详解手机开发

在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/6283.html

(0)
上一篇 2021年7月17日
下一篇 2021年7月17日

相关推荐

发表回复

登录后才能评论