android - IntentService <-> Activity 通信

标签 android service broadcastreceiver broadcast intentservice

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

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

那么如果:

  1. Activity 已创建且可见,因此我们的 BroadcastReceiver 正在监听
  2. 我们正在启动新的 IntentService,此服务在后台运行...(例如连接服务器并检查某些内容)。
  3. Activity 开始不可见,因为有人关闭了屏幕。所以在 onPause 方法中,我们的 BroadcastReceiverunregistered
  4. Intent 服务完成他的任务并使 sendBroadcast 通知更改的状态或 Activity 应该知道的其他事情。 但是现在接收者未注册,所以这个广播消息消失了。
  5. 用户打开屏幕, Activity 再次可见(但它没有来自 Intent 服务的信息)。 Intent 服务消息丢失。

遇到这种情况怎么办?如果我们希望 Activity 获得有关 intentservice 是否停止并结束其工作或类似信息的信息。

最佳答案

How to deal with this kind of situation?

您处理此问题的方式与您处理各种其他情况的方式相同,例如用户按下 BACK(从而破坏 Activity)并在您的 UI 中执行某些操作以创建 Activity 的新实例。

从服务到 Activity 的消息传递是一个推送接口(interface),有利于实时更新。您需要一个 接口(interface), Activity 可以在其中获取当前状态。而且,在许多情况下,这还需要考虑持久性,因为在新 Activity 实例需要显示这些结果时,服务甚至整个流程可能早已不复存在。

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

关于android - IntentService <-> Activity 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21499906/

相关文章:

android - 如何在 fragment 中显示sqlite数据..!

android - 从广播接收器关闭应用程序

android - Android 应用程序的服务能否在用户启动之前运行?

android - Google Firebase 登录给出状态 12501(不工作),在发布构建变体和 jks SHA

Android XML drawable透明渐变不透明

android - OpenGL ES 2.0 中具有不同纹理坐标的两个纹理

c++ - 如何让 C++ Windows 服务在用户登录/注销或 PC 进入休眠/休眠状态时得到正确通知

android - 更改系统时钟时警报管理器停止

javascript - 通过链式服务传递 header

android - 当应用程序最初关闭时,后续(即第一之后)通知挂起 Intent 不会启动 Activity