IntentService< - >活动沟通

时间:2014-02-01 15:26:45

标签: android service broadcastreceiver broadcast intentservice

ActivityIntentService之间进行通信的方法之一是使用BroadcastReceiver(或本地1)和“sendBroadcast()”方法。

仅当活动位于BroadcastReceiver - onResume(可见生命周期)时,

onPause才会收听。

那么如果:

  1. Activity已创建且可见,因此我们的BroadcastReceiver正在倾听
  2. 我们正在开始新的IntentService,此服务正在后台运行...(例如,与服务器连接并检查内容)。
  3. Activity开始变得不可见,因为有人关闭了屏幕。因此,在onPause方法中,我们的BroadcastReceiverunregistered
  4. 意图服务完成他的任务并使sendBroadcast通知更改状态或活动应该知道的其他内容。 但是现在reciver没有注册,所以这个广播消息就会消失。
  5. 用户打开屏幕,活动再次可见(但它没有来自意向服务的信息)。意图服务消息IS LOST。
  6. 如何应对这种情况?如果我们希望Activity获取有关intentservice是否已停止并终止其工作或类似内容的信息。

1 个答案:

答案 0 :(得分:0)

  

如何处理这种情况?

您可以像处理各种其他情况一样处理此问题,例如用户按下BACK(从而销毁活动)并在UI中执行某些操作来创建活动的新实例。

从服务到活动的消息传递是一个推送界面,适用于实时更新。您需要 pull 界面,其中活动可以获取当前状态。并且,在许多情况下,还需要考虑持久性,因为在新活动实例需要显示这些结果时,服务甚至整个过程可能会早已消失。

因此,细节将在很大程度上取决于服务正在做什么以及UI如何确定该工作现在是否已完成以及结果如何。例如,这可能涉及查询数据库。