从和Activity更新当前正在运行的BroadcastReceiver(传递新值)

时间:2011-07-27 20:52:17

标签: android android-intent broadcastreceiver

是否可以从活动中更新当前正在运行的Broadcastreceiver?例如:

假设用户输入一个字符串...然后点击提交...我希望用新字符串更新广播接收器并使用该字符串而不是接收者可能具有的旧字符串。这可能吗?或者我可以以某种方式在用户单击提交时停止旧接收器,然后使用新字符串重新启动它?

2 个答案:

答案 0 :(得分:0)

我认为你不能。如果查看Receiver Lifecycle文档,您会发现生命周期仅限于onReceive。

如果接收者的生命周期足够长,用户可以与之交互,我只需使用BroadcastReceiver来启动服务。该服务可以做两件事:

  1. 启动后台线程以执行长时间运行的任务
  2. 使用IntentFilter注册(不同的)BroadcastRecevier以更新字符串(由活动中的用户更新)。当服务收到Intent时,它将更新字符串值。请注意,您必须在服务和后台线程之间进行同步(作为练习留给感兴趣的读者)。
  3. 每当用户修改有问题的值时,让您的Activity代码触发Intent。

    这个解决方案的好处是如果服务没有运行,那么Intent会被丢弃在地板上而你根本不需要启动服务。如果服务正在运行,则会进行更新。

答案 1 :(得分:0)

也许我误解了你的问题,但为什么不把你的字符串存储在SharedPreference

每当Activity需要更新该字符串时,它会将其保存为首选项,并且在广播接收者的onReceive方法中,您只需从首选项中获取它。