onActivityResult与singleTask或singleInstance的冲突问题

来源:互联网 发布:淘宝退货小纸条写什么 编辑:程序博客网 时间:2024/05/21 08:43

首先 在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()。

0 0
原创粉丝点击