android - 在 Android 分页库数据源中处理 Observable
问题描述
我想观察我的 PageKeyedDataSource 中的网络调用更改,并在用户退出导致数据源破坏的 Fragment 后处理 RxJava订阅。
class ProjectDataSource : PageKeyedDataSource<Int, ProjectPresenter>(), KoinComponent {
...
override fun loadInitial(
params: LoadInitialParams<Int>,
callback: LoadInitialCallback<Int, ProjectPresenter>
) {
val subscription = mProjectRepository.getProjects(DEFAULT_TAKE, 0)
.subscribe(
{ projectPresenters ->
...
},
{ throwable ->
...
}
)
//Where to dispose `subscription`
}
...
}
我的Repository和DataSource都有 RxJava 订阅,它们都对数据执行不同的操作。存储库将远程模型转换为演示者模型并...
我不确定在 DataSource 中观察数据是否是个好主意。
解决方案
我无法提供任何实质性证据证明我的方式是“正确的方式”,但这是我的想法,并且通常在实施中遵循:
- 除非有一些非常边缘的情况,否则我不会处理存储库或数据源下的配置
- 如果我的存储库使用 Rx,我只是将我的所有 Rx 实体(Completable's、Single's 等)暴露给消费者(通常是视图模型),他们订阅并管理处置(在许多情况下通过清除它们
onCleared
) - 如果我的分页数据源正在使用 Rx(顺便说一句,这可能会在失效期间导致不需要的 UI 效果,最好在数据源
loadInitial
和类似方法中运行阻塞操作),我正在CompositeDisposable
通过数据源工厂从视图模型路由实例。
推荐阅读
- arrays - 在 PostgreSQL 中查询 JSON 对象数组中的条件
- javascript - 为什么这个循环重复输出数据?
- ldap - 将角色名称映射到角色
- android - 在 Android Studio 中更改 Autosuggestbox 的颜色
- c# - C# ServerManager 在 Windows 7 上泄漏内存
- facebook-graph-api - 速率限制、Facebook Graph API 和 Javascript
- vba - Excel 加载项上下文菜单按钮
- visual-studio-2015 - 其他 PC 中的 TFS 项目安全性无法访问 TFS
- ios - Swift:如何在使用 AutoLayout 时调整 UITextView 中的字体大小?
- html - 纯 CSS 复选框在 iOS 上的显示方式不同