因项目需要,咱这有个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中处理。咱项目没这个需求,就米有用了。
记录,备忘,好记性不如烂笔头,何况我记性差到爆。