Disposing Observable Inside Android 分页库数据源
Disposing Observable Inside Android Paging Library Data Source
我想观察我的 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`
}
...
}
我的 Repository 和 DataSource 都有 RxJava 订阅,它们都对数据执行不同的操作。存储库将远程模型转换为演示者模型并...
我不确定在 DataSource 中观察数据是否是个好主意。
我无法提供任何实质性证据证明我的方式是 "right way" 但这是我的想法并且通常在实施中遵循:
- 除非一些非常极端的情况,否则我不处理存储库或数据源下的部署
- 如果我的存储库使用 Rx,我只是将我所有的 Rx 实体(Completable 的、Single 的等)暴露给消费者(通常是视图模型),他们订阅并管理处置(在许多情况下通过在
onCleared
)
- 如果我的分页数据源正在使用 Rx(顺便说一句,这可能会在失效期间导致不必要的 UI 影响,最好 运行 阻止数据源中的操作
loadInitial
和方法类似),我正在通过数据源工厂从视图模型路由 CompositeDisposable
实例。
我想观察我的 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`
}
...
}
我的 Repository 和 DataSource 都有 RxJava 订阅,它们都对数据执行不同的操作。存储库将远程模型转换为演示者模型并...
我不确定在 DataSource 中观察数据是否是个好主意。
我无法提供任何实质性证据证明我的方式是 "right way" 但这是我的想法并且通常在实施中遵循:
- 除非一些非常极端的情况,否则我不处理存储库或数据源下的部署
- 如果我的存储库使用 Rx,我只是将我所有的 Rx 实体(Completable 的、Single 的等)暴露给消费者(通常是视图模型),他们订阅并管理处置(在许多情况下通过在
onCleared
) - 如果我的分页数据源正在使用 Rx(顺便说一句,这可能会在失效期间导致不必要的 UI 影响,最好 运行 阻止数据源中的操作
loadInitial
和方法类似),我正在通过数据源工厂从视图模型路由CompositeDisposable
实例。