Android的Activity有四種啓動模式,分別是standard、singleTop、singleTask、singleInstance。測試
測試發現,不一樣的模式下onActivityResult的調用時機不一樣:this
1 在standard、singleTop兩個模式下,onActivityResult方法會在當前的Activity結束掉以後被調用同步
2 在singleTask、singleInstance兩個模式下,onActivityResult方法會當即調用,等到再setResult的時候,就再也不起做用了it
而不是一般理解的不會回調onActivityResult方法class
總之,setResult方法與onActivityResult方法不是同步的。使用的時候須要注意方法
使用案例以下:一共有3個Activity,A,B, C 。調用的順序以下 A----B-----C,B和C都有返回A的操做,而且要返回數據更新A的界面,因此A的launchMode必須是singleTask,,這樣的話B,C傳遞數據的方式再也不是setResult,而後finish()掉,A中監聽onActivityResult()方法。。。正確的作法是,在A中監聽方法onNewIntent(Intent intent),而後B或C返回A的方式應該是:數據
Intent intent = new Intent(B.this,A.class);vi
intent.putExtra("flag","1");回調
startActivty(intent);這樣啓動A的話,onNewIntent會被監聽到,參數Intent就包含了 傳遞的數據,這裏注意的是當調用onNewIntent()時,A中的UI組件已經加載完畢,更新UI的寬度高度等是沒有問題的。new