首先说下这个问题的情景:
当前的软件有一个主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会更方便一些