IntentService < - >活动通信

问题描述 投票:3回答:1

ActivityIntentService之间进行通信的方法IntentService是使用BroadcastReceiver (或Local one)和“ sendBroadcast() ”方法。

BroadcastReceiver仅在Activity处于onResume - onPause (可见生命周期)时才侦听。

那么如果:

  1. Activity已创建并且可见,因此我们的BroadcastReceiver正在侦听
  2. 我们正在开始新的IntentService ,这个服务正在后台工作...(例如连接服务器并检查一些东西)。
  3. Activity开始变得不可见,因为有人关闭了屏幕。 因此在onPause方法中,我们的BroadcastReceiverunregistered
  4. Intent服务完成他的任务并使sendBroadcast通知更改状态或活动应该知道的其他内容。 但是现在reciver未注册,因此这个广播消息就会消失。
  5. 用户打开屏幕,活动再次可见(但它没有意图服务的信息)。 意图服务消息是丢失的。

如何应对这种情况? 如果我们希望Activity获取有关intentservice是否已停止并终止其工作或类似内容的信息。

android service broadcastreceiver broadcast intentservice
1个回答
0
投票

如何应对这种情况?

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.