如何实现通信Activity-Service

Lis*_*nne 7 java android

我有以下情况:

我有一个服务,定期检查互联网上的新数据,

  • 当新数据可用时,它们将被下载并保存在sqlite上.
  • 当保存到db完成时,服务广播一个intent,以便活动知道从db中提取新数据.

用户可能想要请求立即更新...

...在这种情况下,我使用Messenger来请求服务查找新数据

这是问题所在:

用户被通知请求正在进行,但可能需要一段时间,可能会失败,永远不会返回...

目前我收到一条消息(使用Messenger)从服务返回到活动通知请求的结果,或者,如果我没有消息,在x秒后我通知用户请求不成功.

  1. 请问你能提出一个不同的方法吗?
  2. 我不喜欢等待消息,如果在x秒后没有收到通知用户,是否有更好的方法?

Sam*_*ski 3

你已经掌握了基础知识,所以没有什么可推荐的。我将向您展示一些替代方案:

  • 您可以使用ContentObserver并在数据库中有新数据时更新 UI(无需等待来自服务的消息)。
  • 如果 Service <-> UI 组件之间有大量通信,那么查看OttoEventBus或围绕Observables / RxJava重构代码可能会更容易。
  • 您可以将超时逻辑移至服务(这种方式会更容易,因为所有错误处理都将在一个位置),然后将错误消息返回到 UI。大多数网络框架允许您设置连接超时参数,并在达到该时间后使请求失败。如果您还没有研究过网络框架 - Retrofit + OkHttp是一个很好的起点。