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