如何 return 来自 JobService 的结果?

How to return results from a JobService?

我正在玩 Android 并编写一个带有 activity 和服务的小应用程序。 activity 在单击按钮时启动服务,它应该从 URI 获取一些数据,结果 return 它。有时,数据不可用或不符合条件,然后服务应每 X 分钟重试一次,即使 activity 在后台也是如此。

我已经通过 IntentResultReceiver(在包中传递)实现了 activity 和服务之间的通信。在实施服务时,我想使用新的 JobScheduler 组件,但后来发现它只能接受一个 PersistableBundle 而不能添加一个 Parcelable 对象 (ResultReceiver) 但是只有基本类型。

我希望服务安排一项作业,该作业将在网络可用时 运行 每隔 X 分钟检查一次数据。一旦它得到它,我希望将数据 returned 到 服务 以便它可以决定它是否可以接受或者我们需要重试。如果服务接受数据,它将通过 ResultsReceiver.

return 将其发送到 activity

我不能将 ResultsReceiverJobService 一起使用,因为我没有构建 JobService 实例(由 JobInfo.Builder 完成),我无法将对回调对象的引用传递给它。

如何在计划的作业和调用它的服务之间进行通信?

对不起,如果它是微不足道的,我不熟悉 Android..

谢谢!

How can I communicate between a scheduled job and the service that invoked it?

通常情况下,您不需要。您的服务和 activity 都不可能存在。 JobScheduler 背后的要点是当您的应用不再 运行 时有工作 运行。如果您以其他方式使用它,那可能不合适。

也就是说,欢迎您使用事件总线(我会选择 greenrobot 的 EventBus,尽管 LocalBroadcastManager 也可以在这里工作),以在您的流程中引发一个事件来表明工作完成了。您的服务(或 activity)可以在总线上注册事件并在引发这些事件时做出反应。然而,与此同时,如果没有注册的处理程序,事件总线完全满足于让事件 "fall on the floor" 发生,因此如果需要,您的 JobService 可以在 "fire and forget" 模式下引发事件。