本文主要是介绍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得到的值就会是正确的了。
这篇关于Android解决service向activity传值失败的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!