如何从JobService返回结果?

时间:2016-05-20 14:40:13

标签: android android-jobscheduler

我正在玩Android并编写一个带有活动和服务的小应用程序。活动在按钮单击时启动服务,它应该从URI获取一些数据并将其作为结果返回。有时,数据不可用或不符合标准,然后即使活动在后台,服务也应该每X分钟重试一次。

我已经通过IntentResultReceiver(在捆绑中传递)实现了活动与服务之间的通信。在实施服务时,我想使用新的JobScheduler组件,但之后看到它只能接受PersistableBundle无法添加Parcelable对象(ResultReceiver )但只有基本类型。

我希望服务能够安排一个在网络可用时运行的作业以及每隔X分钟检查一次的数据。一旦获得它,我希望将数据返回到服务,以便它可以决定它是否可接受或我们需要再次重试。如果服务接受数据,它将通过ResultsReceiver将其返回到活动。

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:6)

  

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

一般来说,你不是。您的服务和活动都不可能存在。 JobScheduler背后的一点是在您的应用不再运行时运行作业。如果您以其他方式使用它,那可能不合适。

话虽如此,欢迎您使用活动巴士(greenrobot的EventBus将是我的选择,虽然LocalBroadcastManager也会在这里工作),在您的流程中提出一个事件来说明工作完成了。您的服务(或活动)可以注册总线上的事件,并在发生这些事件时做出反应。然而,与此同时,活动巴士完全满足于让活动落在地板上#34;如果没有注册处理程序,那么你的JobService可以在火灾中提升事件并忘记"模式,如果需要。