startActivityForResult 没有反应

今天遇到个比较坑爹的问题,我用startActivityForResult并没有反应。瞬间郁闷了,代码如下
Intent intent1 = new Intent(this, ChooseShiperAndCargoActivity.class);
                intent1.putExtra("titleStr","发货人");
                intent1.putExtra("flag",1);
                startActivityForResult(intent1,1003);


Intent in = new Intent();
                in.putExtra("id",list.get(position).id);
                in.putExtra("name",list.get(position).name);
                setResult(RESULT_OK,in);
                AppManager.getAppManager().finishActivity(ChooseShiperAndCargoActivity.this);



@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK){
            if (requestCode == 1003){
                fahuoId = data.getIntExtra("id",0);
                tv_fahuo.setText(data.getStringExtra("name"));
            }
}
}

代码完全没有任何问题,但是调试的时候发现我调用了startActivityForResult之后直接就进入了 onActivityForResult里面,这明显不对啊。正确的顺序应该是:startActivityForResult --》setResult--》onActivityForResult。

看到这里我真心无语了,代码没错,但是执行顺序不对。那么问题很可能就出在我的activity的launchMode,果不其然,在我的manifest文件里面,我对应的两个activity都是配置的singleTask,去掉之后就完全没有问题啦。

然后自己又去学习了下关于launchMode的相关东西,它有4种模式:

singleTop :对于singleTop模式的Activity,如果被调用的任务已经有一个这样的activity在堆栈的顶端,那么不会有新的实例创建,任务会使用当前顶端的activity实例来处理Intent对象。换句话说,如果被调用的任务包含一个不再堆栈顶端的singleTop  Activity,或者堆栈顶端为singleTop 的activity的任务不是当前被调用的任务,那么,任然会有一个新的对象会被创建。

standard:standard模式的activity在被调用时会创建一个新的实例,所有的实例处理同一个Intent对象。

注:standard和singleTop属性的activity的实例可以属于任何Task,并且可以位于堆栈的任何位置。


singleInstance:对于singleInstance模式的activity,Task堆栈中如果有这样的activity,那么它将是堆栈中唯一的activity,当前任务收到的Intent都由它处理,由它开启的其他的activity将在其它任务被启动。

singleTask:对于singleTask模式的activity,它在堆栈的底端,其上方可以有其他的activity被创建,但是,如果发给该activity的Intent对象来时该Activity不再堆栈顶端,那么该Intent对象将被丢弃,但是界面还是会切换到当前的Activity。

注:singleTask和singleInstance仅可用于启动任务的情况,这两种模式下的activity会处在堆栈的最底端,并且一个任务只能被实例化一次。


本博客只用来记录自己学习的点点滴滴,同时也是将自己的心得体会分享给大家,不喜勿喷。一切为了学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值