我正在玩Android并编写一个带有活动和服务的小应用程序。活动在按钮单击时启动服务,它应该从URI获取一些数据并将其作为结果返回。有时,数据不可用或不符合标准,然后即使活动在后台,服务也应该每X分钟重试一次。
我已经通过Intent
和ResultReceiver
(在捆绑中传递)实现了活动与服务之间的通信。在实施服务时,我想使用新的JobScheduler
组件,但之后看到它只能接受PersistableBundle
无法添加Parcelable
对象(ResultReceiver
)但只有基本类型。
我希望服务能够安排一个在网络可用时运行的作业以及每隔X分钟检查一次的数据。一旦获得它,我希望将数据返回到服务,以便它可以决定它是否可接受或我们需要再次重试。如果服务接受数据,它将通过ResultsReceiver
将其返回到活动。
我无法将ResultsReceiver
与JobService
一起使用,因为我没有构建JobService
实例(由JobInfo.Builder
完成) ,我无法将它传递给回调对象。
如何在预定作业和调用它的服务之间进行通信?
对不起,如果它微不足道,我对Android不熟悉..
谢谢!
答案 0 :(得分:6)
如何在预定作业和调用它的服务之间进行通信?
一般来说,你不是。您的服务和活动都不可能存在。 JobScheduler
背后的一点是在您的应用不再运行时运行作业。如果您以其他方式使用它,那可能不合适。
话虽如此,欢迎您使用活动巴士(greenrobot的EventBus将是我的选择,虽然LocalBroadcastManager
也会在这里工作),在您的流程中提出一个事件来说明工作完成了。您的服务(或活动)可以注册总线上的事件,并在发生这些事件时做出反应。然而,与此同时,活动巴士完全满足于让活动落在地板上#34;如果没有注册处理程序,那么你的JobService
可以在火灾中提升事件并忘记"模式,如果需要。