我正在尝试开发一个小应用程序,使用活动和服务。当用户点击按钮时,活动会启动服务,并从URI中获取数据并返回结果。有时候,数据不可用或不符合要求,此时即使活动在后台,服务也应该每隔X分钟重试。
我已经通过Intent和ResultReceiver(通过bundle传递)实现了活动与服务之间的通信。在实现服务时,我想使用新的JobScheduler组件,但发现它只能接受PersistableBundle,不能添加Parcelable对象(ResultReceiver),只能添加基本类型。
我希望服务能够安排一个工作,在网络可用时每隔X分钟检查数据。一旦获取到数据,就将数据返回给服务,以便它决定是否接受数据或需要重试。如果服务接受数据,则会通过ResultsReceiver将其返回给活动。
我无法在JobService中使用ResultsReceiver,因为我不能构造JobService实例(由JobInfo.Builder完成),也不能向回调对象传递引用。
如何在预定的任务和调用它的服务之间进行通信?
对于Android不熟悉的话题,如果有什么不清楚的地方请见谅。
谢谢!
JobScheduler
的设计是用于未来数分钟、数小时或数天可能发生的作业。不能保证您有进程,更别提用户界面了。Android将为您分叉一个进程,但仅此而已。因此,如果要更新存在的UI,则使用LocalBroadcastManager
是可以的。如果sendBroadcast()
返回false
,则说明没有UI响应本地广播,您的JobService
可以执行其他操作(例如,弹出通知)。 - CommonsWare