我想在我的PageKeyedDataSource中观察我的网络调用更改,并在用户退出导致数据源破坏的片段后处理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`
}
...
}
我的存储库和数据源中都有 RxJava 订阅,它们都对数据执行不同的操作。存储库将远程模型转换为演示器模型,然后...
我不太确定观察数据源中的数据是个好主意。
我无法提供任何实质性的证据证明我的方式是"正确的方式",但这是我的想法,通常在实现中遵循:
- 除非真的是边缘情况,否则我不处理存储库或数据源下的处置
- 如果我的存储库使用 Rx,我只是将我所有的 Rx 实体(Completable、Single's 等(公开给消费者(通常是视图模型(,他们订阅并管理处置(在许多情况下通过清除它们
onCleared
- 如果我的分页数据源使用的是 Rx(顺便说一下,这可能会在失效期间导致不需要的 UI 效果,最好在数据源
loadInitial
和方法中运行阻塞操作(,我将CompositeDisposable
实例从视图模型路由到数据源工厂。