人员都知道,可以经由过程应用 startActivityForResult() 和 onActivityResult() 办法来传递或接管参数。

然而在“轻听”项目中,还没比及被调用的 Activity 返回,onActivityResult() 就被履行了。

找了好久,终于经由过程小道消息得知,这与 Activity 的加载模式(launchMode)有关,该属性可以在 AndroidManifest.xml 中设置。

本来将其设为 singleInstance,经测试,所有须要传递或接管的 Activity 不容许设置该属性,或只能设为标准模式,不然体系将在 startActivityForResult() 后直接调用 onActivityResult()。

调用startActivityForResult后,onActivityResult无响应的题目

两个activity传递数据和返回数据时,恳求方的onActivityResult始终无响应,经由过程debug调试模式也没见调用该办法。查看了各类设备和法度代码,均未发明有错误之处。后面找了很多材料,总算看到一个伴侣说是调用startActivityForResult的参数题目,即调用时如许:

startActivityForResult(intent, 0);

是第二个参数的题目,该参数必须大于0才干在返回值,并激活onActivityResult办法。

我最开端是用的一个activity默认的常量:RESULT_OK,跟踪了代码后发明,该常量的值为-1,当然没法激活 onActivityResult办法了,随后随便批改为一个大于0的整数,法度即通跑成功。

startActivityForResult(intent, 1); //如许就行了

1.startActivityForResult(Intent intent, Int requestCode);

2.setResut(int resultCode, Intent intent);

3.onActivityResult(int requestCode, int resultCode, Intent intent);

重视事项:

1.比来应用startActivityForResult,失足,跟踪后发明activity并没有被启动,而是直接履行 onActivityResult。后查看日记发明

“05-19 02:11:19.822: WARN/ActivityManager(67): Activity is launching as a new task, so cancelling activity result.”

本来是我把要启动的activity的launchmode设置成singleTask了。

把目标activity的launchmode去掉,正确。

总结:目标activity的launchmode不克不及设置成singleTask。

2.requestCode值>=0,不然,startActivityForResult就变成了 startactivity

从SDK我们可以看到如下深奥的解释:http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

The other modes — singleTask and singleInstance — are not appropriate for most applications, since they result in an interaction model that is likely to be unfamiliar to users and is very different from most other applications.

从柯元旦的《Android 内核剖析》的第十章“Ams内部原理“10.1.3中有这样的一段话:请注意:SINGLE_TASK标识以及SINGLE_INSTANCE两个标识必须在r.result==0的条件中,即这两个标识只能用在startActivity()的方法中,而不能使用在startActivityForResult方法中。因为从Task的角度看,Android认为不同Task之间的Activity是不能传递数据的,所以不能使用NEW_TASK标识,但还是要调用forResult方法。

注:自己不懂了,花了时间了,但是没有想到解决方法,那就去问前辈,问别人。或许这是个坑。别人一下子就知道了为什么。

因为这个坑,没有必要画时间去再去平一遍。

懂得问。懂得借助他人的力量。

调用startActivityForResult后直接调用onActivityResult的更多相关文章

  1. 调用startActivityForResult后,onActivityResult为什么立刻响应

    现象      今天在编写代码的时候,涉及到两个Activity通过Intent来传值的问题.具体描述为:activity A调用startActivityForResult()函数启动Activit ...

  2. 调用startActivityForResult,onActivityResult无响应的解决办法

    三种情况: 1.执行startActivityForResult,没等到被调用的 Activity 返回,onActivityResult() 就被执行了.找了很久,终于通过小道消息得知,这与 Act ...

  3. 总结:调用startActivityForResult,onActivityResult无响应的问题

    人人都知道,可以通过使用 startActivityForResult() 和 onActivityResult() 方法来传递或接收参数. 但你是否遭遇过onActivityResult()不执行或 ...

  4. android小知识之fragment中调用startActivityForResult(Intent intent,int requestcode)所遇到的问题

    大家都知道对于Activity和Fragment都可以注册OnActivityResult()方法,但是要注意几点: a.当activity和fragment都注册了OnActivityResult( ...

  5. Fragment调用startActivityForResult导致的回调Activity无法获取正确的requestId的问题

    今天遇到了一个问题 从Fragment内调用了startActivityForResult方法设置了requestId是1 但是在Activity内的onActivityResult的回调内 获得的r ...

  6. Android开发 Fragment中调用startActivityForResult返回错误的requestCode

    返回错误的requestCode返回值为65537,在Fragment里调用startActivityForResult,就必须在Fragment里处理onActivityResult.

  7. 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句

    如题: 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句不是一条关联查询语句. 例如: $list = $db->relation(true) ...

  8. 使用SetLocaleInfo设置时间后必须调用广播WM_SETTINGCHANGE,通知其他程序格式已经更改

    uses messages; Procedure SetDateFormat; //设置系统日期格式var buf:pchar; i:integer; p:DWORD;begin getmem(buf ...

  9. 在调用相机后idleTimerDisabled失效的问题

    在调用相机后idleTimerDisabled失效的问题 相关资料: http://stackoverflow.com https://github.com/jamiemcd 问题 前几天有人在群里边 ...

随机推荐

  1. WINCC runtime连接SIMOTION simulator SIMOSIM

    测试使用的软件版本 TIA Portal V14sp1 Windows7 sp1 (professional) Scout 5.1(integrated in TIA 集成项目) VMware wor ...

  2. C++ Eigen库和Matlab对比

    // A simple quickref for Eigen. Add anything that's missing. // Main author: Keir Mierle #include &l ...

  3. 正则表达式转换python2的print为python3风格

    直接查找 print ([^\n\(]*)替换为 print($1)

  4. MySQL latch小结

      lock和latch的比较 对于INNODB存储引擎中的latch可以通过命令 SHOW ENGINE INNODB MUTEX 看到latch的更多信息 说明: 列Type显示的总是 InnoD ...

  5. user(),current_user()函数的区别

    user() 表示当前的登录用户   current_user() 表示对应于mysql.user表里对应的账号.

  6. nginx里面的rewrite配置

    哎,我需要静静,刚刚在去怎么优化dom层级,发现更新完代码,层级又蹭蹭蹭的往上涨,顿时没脾气了,还是把昨天的nginx配置总结下,增加点动力,昨天前天两天都在搞这个问题,也是搞的没脾气,网上查了很多资 ...

  7. 离线安装vscode vsix插件

    VS代码扩展市场 通过扩展增强Visual Studio代码的强大功能 https://marketplace.visualstudio.com/vscode Visual Studio Code包含 ...

  8. quartz的持久化任务调度使用应用的dataSource

    Quartz提供两种基本作业存储类型--->第一种类型叫做RAMJobStore:     最佳的性能,因为内存中数据访问最快     不足之处是缺乏数据的持久性,当程序路途停止或系统崩溃时,所 ...

  9. 最近的阅读list

    fast rcnn 统一了sppnet和rcnn,将原来rcnn分stage的训练合为一个整体的stage,一次完成cls, regression的训练.引入两个loss函数,一个是用来进行cls的, ...

  10. 给大家一个我的QQ群

    很少关注博客了,提供一个QQ群讨论 我的一个QQ群:158351344