android intent singletask,singleTask模式Activity二次start接收Intent失败?

因项目需要,咱这有个singleTask模式的MainActivity,是个FragmentActivity。进入到别的功能页面后,经常在获得功能结果时,需要使用startActivity调起MainActivity。此时,activity栈中,刚才在MainActivity上面堆的所有Activity被咔嚓走,MainActivity重新站在顶点(singleTask特性,大家都明白)。同时,MainActivity要接收新传来的intent,获取extra,判断调起时显示哪个Fragment。

看起来很OK对不对?​

然后咱就想当然地,直接startActivity,把数据放进intent​,放手机里一试,哎?咋回事儿?为啥想显示FragmentB,结果显示的是MainActivity上次的状态?

在排除了代码逻辑问题后,乖乖去google。

问题原因找到了:​singleTask模式下,第二次启动Activity时,不会重新实例化(这是当然的,省资源啊)。这种情况下,onCreate不会再走了,onResume也拿不到最新intent,因为新传来的intent没有经过任何接收处理。

​解决方法参考:http://blog.csdn.net/harryweasley/article/details/46557827

基本上就是依赖了onNewIntent(Intent

intent)这个方法,在Activity里override一下。那个参数intent就是新的,需要我们在这里用setIntent(intent),将它设置到Activity中,而且还需要解析这个intent,拿到数据后就该做啥做啥了。

根据链接中的方法,如果有Fragment需要对此响应,就得在Fragment的onResume中处理​。咱项目没这个需求,就米有用了。

记录,备忘​,好记性不如烂笔头,何况我记性差到爆。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值