startActivityForResult 和 startActivity

首先说下这个问题的情景:

当前的软件有一个主Activity A1 并且从A1可以跳转到A2 A3两个界面 而A2 A3也可以回退到A1 同时在这之间 需要传递一些数据

第一种做法是:

 

Intent intent=new Intent(A1.this,A2.class);
//给intent通过setExtra等方法设置要传递的信息
startActivity(intent);

 

 

在A2中可以通过getIntent()方法将信息取出来

同理,A2回退到A1 也一样

 

也就是A1和A2之间互相startActivity

 

但是在学习的过程中 发现Activity的跳转还存在另外一个方法startActivityForResult

以A1跳转A2为说明

启动方式没有改变 只是将startActivity改为startActivityForResult

 

而此时从A2回到A1 就不需要再次调用startActivity了,而是采用

Intent intent=new Intent();

//同样在intent中放置需要传递的信息
setResult(RESULT_CODE, intent); //RESULT_CODE是一个int值 用于父界面区分
finish(); //关闭自己 一定要执行这句话

  此时由于子窗口关闭 父窗口就被显示出来,为了取得需要传递的那些值,还需要在父窗口中复写一个重要方法onActivityResult

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
		super.onActivityResult(requestCode, resultCode, intent);
	}

  其中就可以根据resultCode来进行不同的操作了

 

 

最后 两者之间又有什么区别呢

default的startActivity的LaunchMode如果在多次反复跳转的情况下 产生多个A1 A2的实例(LaunchMode包括standard,SingleTop,SingleTask,SingleInstance4种)这可能并不是我们期望的

 

当然还有一个问题 如果采用互相跳转 同时又采用SingleTask的mode 两者之间是不是就相等了。。至少从我的理解来看 是相同的 但是在这样的情况下 觉得startActivityForResult会更方便一些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值