- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在玩 Android 并编写一个包含 Activity 和服务的小应用程序。该 Activity 在单击按钮时启动服务,它应该从 URI 中获取一些数据并将其作为结果返回。有时,数据不可用或不符合条件,然后服务应每 X 分钟重试一次,即使 Activity 在后台也是如此。
我已经通过 Intent
和 ResultReceiver
(在包中传递)实现了 Activity 和服务之间的通信。在实现服务时,我想使用新的 JobScheduler
组件,但后来发现它只能接受一个 PersistableBundle
而不能添加一个 Parcelable
对象 (ResultReceiver
) 但只有基本类型。
我希望该服务安排一个作业,该作业将在网络可用时运行,并且每隔 X 分钟检查一次数据。一旦它得到它,我希望将数据返回到服务,以便它可以决定它是否可以接受或者我们需要重试。如果服务接受数据,它将通过 ResultsReceiver
将其返回给 Activity 。
我不能将 ResultsReceiver
与 JobService
一起使用,因为我没有构建 JobService
实例(由 JobInfo.Builder
),我无法将对回调对象的引用传递给它。
如何在预定作业和调用它的服务之间进行通信?
对不起,如果它是微不足道的,我对 Android 不熟悉..
谢谢!
最佳答案
How can I communicate between a scheduled job and the service that invoked it?
通常,您不需要。您的服务和您的 Activity 都不可能存在。 JobScheduler
背后的要点是让作业在您的应用程序不再运行时运行。如果您以其他方式使用它,那可能不合适。
也就是说,欢迎您使用事件总线(我会选择 greenrobot 的 EventBus,尽管 LocalBroadcastManager
也可以在这里工作),在您的流程中引发一个事件,表明工作完成。您的服务(或 Activity )可以在总线上注册事件并在引发这些事件时使用react。然而,与此同时,如果没有已注册的处理程序,事件总线完全满足于让事件“落在地板上”,因此您的 JobService
可以在“即发即弃”的情况下引发事件如果需要模式。
关于android - 如何从 JobService 返回结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37349596/
我是一名优秀的程序员,十分优秀!