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會更方便一些

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章