Android解决service向activity传值失败的问题

问题:在service使用Intent打开activity并传递值,在onResume中使用getIntent不能及时地获得正确的值,取到的是上一次的值。

一般情况下,我们在使用intent打开activity时候,会执行onCreate、onStart、onResume,如果此时activity处于栈顶,再次打开activity执行onPause、onStop,此时activity再接受intent请求的话,会执行onNewIntent、onRestart、onStart、onResume。因此,当后台运行的activity回到前台并传递回数据时候需要特别注意下。

默认情况下,使用intent开启activity时,即使已经存在一个相同的正在运行的activity,系统也会创建一个新的实例显示。为避免实例化多次,需要在清单文件中将该activity的launchMode设为singleTask。此时,当再次通过intent开启一个已存在的实例,那么系统就不会再调用onCreate,而是调用onNewIntent方法。

解决方法:设置activity的launchMode为singleTask的前提下,调用onNewIntent方法,并在里面调用setIntent(intent)确保获得的值不是上一次保存下来的。此时,再调用onResume得到的值就会是正确的了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值