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`
    }

    ...
}

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

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

我无法提供任何实质性证据证明我的方式是 "right way" 但这是我的想法并且通常在实施中遵循:

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