android中setResult的调用时机

最近在做项目的过程中有需要用到返回值,但是由于需求比较复杂,感觉把setResult放到onStop中比较方便,但是发现在onStop中写入setResult(。。。)和finish()之后,跟本就不会回传值,后来又试了onPaulse和onDestroy均是不可以。

后来发现是因为错过了onActivityResult的调用时机,
拿B返结果给A作示例:
B—onPause
  A—onActivityResult
  A—onRestart
  A—onStart
  A—onResume
  B—onStop
  B—onDestroy

从上面过程可以看出,首先是B处于Pause 状态,然后等待A执行 onRestart——> onStart ——〉onResume,然后才是B 的onSstop——>onSdestroy,而A的 onActivityResult() 需要在B的onPause之后,A的onRestart之前这中间调用,所以B中的setResult()函数应该放在B的onStop之前调用。

另外我试验了一下,如果把setResult()放在 B 的 onPause() 里面调用,结果仍然是无效的。

那么setResult()应该在什么时候调用呢?从源码可以看出,Activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。所以在onPause、onStop、onDestroy方法中调用setResult()也有可能不会返回成功,因为这些方法调用不一定是在finish之前的,当然在onCreate()就调用setResult肯定是在finish之前的,但是又不满足业务需要。

	//以下是我测试是否可以返回result示例代码,结果显示,放到这三个位置都是不可以的。

	private void goBack(int i){
        Intent intent = new Intent();
        intent.putExtra("index", ""+i);
        setResult(1,intent);
        finish();
	}

	@Override
    protected void onPause() {
        super.onPause();
        Log.d("haha",">>>>>"+"onPause");
        goBack(5);
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("haha",">>>>>"+"onStop");
//        goBack(6);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("haha",">>>>>"+"onDestroy");
//        goBack(7);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值