关于onActivitiyResult方法中data为空的bug

很简单的功能
第一个界面待返回值打开第二个界面,在第二个界面获取验证码,填入输入框,然后点击确定按钮,把输入的验证码返回到第一个界面,加上其他参数一块提交。
下面是代码

1,待返回值启动的代码
这里写图片描述

2,openActivityForResult是封装的一个方法
这里写图片描述

3,第二个界面setResult
这里写图片描述

4,第一个界面回调onActivityResult
这里写图片描述

5,打印出来
这里写图片描述
data为空

6,这是为什么呢?
5.0之后,android的LaunchMode与StartActivityForResult的关系发生了一些改变。

ActivityStackSupervisor类中的startActivityUncheckedLocked方法在5.0中进行了修改。在5.0之前,当启动一个Activity时,系统将首先检查Activity的launchMode,如果为A页面设置为SingleInstance或者B页面设置为singleTask或者singleInstance,则会在LaunchFlags中加入FLAG_ACTIVITY_NEW_TASK标志,而如果含有FLAG_ACTIVITY_NEW_TASK标志的话,onActivityResult将会立即接收到一个cancle的信息,而5.0之后这个方法做了修改,修改之后即便启动的页面设置launchMode为singleTask或singleInstance,onActivityResult依旧可以正常工作,也就是说无论设置哪种启动方式,StartActivityForResult和onActivityResult()这一组合都是有效的。所以如果你目前正好基于5.0做相关开发,不要忘了向下兼容,这里有个坑请注意避让。

7,删除启动模式后打印,data已经有值了。
这里写图片描述

LaunchMode与StartActivityForResult之间的关系:

这里写图片描述

这里写图片描述

引用:
http://www.jianshu.com/p/2a9fcf3c11e4
http://blog.csdn.net/chenming1990118/article/details/12434797

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值