这个问题浪费了我很多时间,参考了网上的一些博客,找到了原因,在此感谢那些分享知识的人!  调用startActivityForResult后,onActivityResult立刻响应,原因如下:  原因是在AndroidManifest.xml 中跳转到的页面我自己设置了android:launchMode="singleTask",因为需要传值的 Activity 不容许设置该属性或者 singleInstance,或只能设为标准模式,不然将在 startActivityForResult()后直接调用 onActivityResult()。解决办法:去掉跳转到的页面的lanchMode属性即可。

另外,requestCode值必须要大于等于0,不然,startActivityForResult就变成了 startactivity。

请注意:SINGLE_TASK标识以及SINGLE_INSTANCE两个标识必 须在r.result==0的条件中,即这两个标识只能用在startActivity()的方法中,而不能使用在startActivityForResult方法中。因为从Task的角度看,Android认为不同Task之间的Activity是不能传递数据 的,所以不能使用NEW_TASK标识,但还是要调用forResult方法。当然这种说法很无赖。就像数学里面提到的公理一样,既然是公认的规定,还是要达成共识。笔者当然是不甘心的。于是又找到了一篇文章,解释的较为清楚。如图:假设当前的应用程序存在两个栈:其中一个直接显示在屏幕上负责与用户完成交互,叫BackStack;另一个是隐藏在后台的background task,且位于该栈顶的Activity Y的启动模式被设置为 singleTask。 如果Activity 2中调用background Task中已经启动过的Activity Y,则background Task内占据屏幕并且将该Task下所有的栈保留当前的栈位置和顺序push进back Task形成新的结构。在Activity界面按返回键,则Activity Y出栈,Activity X占据屏幕。因此可见,由Activity2调用的Activity Y,但返回键后,回退显示的是Activity X。所以,即使在Activity执行setResult()函数,Activity2也是无法接收到的。

由于这种现象的存在,所以android系统处于某种保护机制,发现将要跳转的Activity的启动模式是singleTask时,若需要执行onActivityResult()函数则立即执行。这样就好理解多了 

更多相关文章

  1. Android(安卓)NDK开发 Cmake环境调用 so文件
  2. 服务--Service
  3. Android学习笔记_32_通过WebView实现JS代码与Java代码互相通信
  4. Fragment(二)-----分析执行的过程篇
  5. android在PC端键盘启动手机上的应用的摸索
  6. 最简单的android studio调用ffmpeg动态库
  7. android native内存泄漏检测原理
  8. android中使用反射机制,调用framework中的类和方法
  9. 关于上传的app的标识号和版本号

随机推荐

  1. 加android库
  2. 2018-06-02 mac上完整卸载删除:android s
  3. Hello Android - Android SDCard操作(文
  4. “ant debug install” 出错: sdk.dir is
  5. 分析图库
  6. android 运用AsyncTask 获取图片并显示
  7. android端口被占用
  8. Android 字符串转换大小写
  9. android adt错误
  10. Android:ListView数据异步加载、Handler、