首页 > 解决方案 > 在 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`
    }

    ...
}

我的RepositoryDataSource都有 RxJava 订阅,它们都对数据执行不同的操作。存储库将远程模型转换为演示者模型并...

我不确定在 DataSource 中观察数据是否是个好主意。

标签: androidkotlinrx-java2android-paging

解决方案


我无法提供任何实质性证据证明我的方式是“正确的方式”,但这是我的想法,并且通常在实施中遵循:

  1. 除非有一些非常边缘的情况,否则我不会处理存储库或数据源下的配置
  2. 如果我的存储库使用 Rx,我只是将我的所有 Rx 实体(Completable's、Single's 等)暴露给消费者(通常是视图模型),他们订阅并管理处置(在许多情况下通过清除它们onCleared
  3. 如果我的分页数据源正在使用 Rx(顺便说一句,这可能会在失效期间导致不需要的 UI 效果,最好在数据源loadInitial和类似方法中运行阻塞操作),我正在CompositeDisposable通过数据源工厂从视图模型路由实例。

推荐阅读