记录一次 android activity通过 intent传值失败

问题:

今天在修复项目bug时,需要通过Intent 来传值控制主Activity tab切换,但是在返回MainActivity时,发现收不到intent传递到数据,

然后检查一下代码,发现传递的Key和获取的Key都没错,但是为什么在目标Activity会获取不到传递过来的数据?

然后查资料,发现是Activity的启动模式导致的,MainActivity 设置的启动模式是 singleTask ,

也就是说,如果目标Activity的实例已经存在并且符合要求,则不会再创建相应的实例,因此在Activity的4种启动模式中,以singleTop(有可能)、singleTask、singleInstance模式启动的目标Activity,当置于后台被再次启动时都会导致目标Activity获取不到传递过来的数据(这里指的获取不到是指在不借助其它操作时)。

更通俗来讲就是,这时候通过 getInten() 方法获取到的 intent 是已启动的 activity 的原始 intent,也就是说 intent 的数据没有更新,这样在已启动的 activity 里拿到的 intent 的数据是旧数据。

解决方法:

知道原因之后,那么该如何解决这个问题呢?其实谷歌早就考虑到了这种问题,于是在Androidapi中的Activity类中给我们提供了一个叫onNewIntent的方法来解决这个问题:

如果要每次获取 intent 传来的新数据就需要在 onNewIntent(Intent intent) 方法里调用setIntent(intent)设置这个传来的最新的 intent。
即在启动模式为 singleTask 的 activity 里加上以下代码,然后通过 getIntent() 就可以获取到新传递过来的值了。

protected void onNewIntent(Intent intent) {
   super.onNewIntent(intent);  
 setIntent(intent);//must store the new intent unless getIntent() will return the old one   processExtraData(); 
}

参考:
链接:https://www.jianshu.com/p/ad13bebc82ab
链接:https://www.jianshu.com/p/e0244db7e33f

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值