rxJava 和改造而不是 IntentService + CursorLoader?

rxJava and retrofit instead of IntentService + CursorLoader?

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

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

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

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

Is it possible to use rxJava inside an IntentService that posts the result back to an Activity?

您可以使用标准 Android 组件 BroadcastReceiver, LocalBroadcastManager or an EventBus

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

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

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