【问题标题】:rxJava and retrofit instead of IntentService + CursorLoader?rxJava 和改造而不是 IntentService + CursorLoader?
【发布时间】:2016-02-04 07:23:26
【问题描述】:

在我的应用程序中,我每次进行网络调用时都会使用 IntentServices。我使用 Volley 处理 HTTP 通信,结果存储在数据库中(使用 ContentProvider)。在我的活动/片段中,我使用 CursorLoaders 来更新我的 UI 组件。这在设备轮换的情况下非常有用,并且我的所有网络代码都与我的活动/片段分离。

但此时我的应用程序有 30 个数据库表。我可以预测表的数量只会增加。感觉很乱,有点太复杂了。

我一直在阅读有关 rxJava / rxAndroid 和 Retrofit 的文章,似乎许多开发人员更喜欢 rxJava 而不是 IntentServices+CursorLoaders。我见过的所有 rxJava 示例根本不包括 IntentServices。是否可以在 IntentService 中使用 rxJava 将结果发布回 Activity? (我可以预测,API返回的一些结果需要存储在数据库中)

如果我不使用 IntentService,我应该如何处理设备旋转?

【问题讨论】:

  • 不,如果你想避免问题,你应该使用服务,更多here
  • @pskink 你说的是什么问题?

标签: android rx-java intentservice android-cursorloader rx-android


【解决方案1】:

是否可以在 IntentService 中使用 rxJava 来发布 结果返回到 Activity?

您可以使用标准的 Android 组件 BroadcastReceiverLocalBroadcastManagerEventBus

另一种方式,假设activity中显示的数据是从数据库中加载的:

使用SQLBrite,一个围绕SQLiteDatabase 的Rx 包装器来加载活动中的数据。这与CursorLoader 类似。当数据库中的数据发生变化时,它会重新加载数据。

在您的IntentService 中下载数据并将其插入数据库(使用SQLBrite)。 SQLBrite 将收到通知,并将重新加载活动中的数据。

【讨论】:

  • 我看过 Otto (EventBus),但它现在已被弃用,他们建议使用 rxJava。我想要使​​用数据库的替代方法,因为我最终得到了 30 多个表,这使我的应用程序过于复杂。有时我更喜欢只将对象放在内存中,并且可能使用 Retrofit 来缓存来自服务器的数据
  • @KasperFinneNielsen 为什么不看看 Realm.io 或 Storio?
猜你喜欢
  • 1970-01-01
  • 2018-10-05
  • 2021-06-04
  • 1970-01-01
  • 2016-11-24
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
相关资源
最近更新 更多