首先說下這個問題的情景:
當前的軟件有一個主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會更方便一些