首先 在activity one里的一个button ,绑定了响应函数。
内部的具体逻辑是这样的:
Intent intent = new Intent(one.this,two.class);
startActivityForResult(intent, 1);
Log.v("gjh","0");
因为是 startActivityForResult()启动的,所以这个activity里还要有一个onActivityResult(int requestCode, int resultCode, Intent data) 函数。
内部是这样的:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
Log.v("gjh","1");
}
在activity two中的button响应函数是这样的:
Log.v("gjh",“2“);
Intent intent=new Intent();
setResult(RESULT_OK,intent);
finish();
先点击one中 button ,再点two的button回来。
讲道理的话,打印的顺序应该是 0、2、1。
但是我打印出来的确是0、1、2。
这说明点击one的button后直接进入onActivityResult,而从two结束后反而没有进入onActivityResult。
startActivityForResult() 和 onActivityResult()与 Activity 的加载模式(launchMode)有关。
原项目中的启动模式是singleTask。
而这个会和startActivityForResult() 和 onActivityResult()产生冲突。
此时会有打印:Activity is launching as a new task, so cancelling activity result.”
经测试,所有须要传递或接管的 Activity 不容许设置该属性,或只能设为标准模式,不然体系将在 startActivityForResult() 后直接调用 onActivityResult()。