在Android寻呼库数据源内处置可观察到的东西

问题描述 投票:0回答:1

我想在我的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订阅 储存库数据源 都对数据进行不同的操作。Repository将远程模型转换为presenter模型,并 ...

我不太确定在DataSource里面观察数据是个好主意。

android kotlin rx-java2 android-paging
1个回答
1
投票

我无法提供任何实质性的证据证明我的方式是 "正确的方式",但这是我的想法,也是我在实现中通常遵循的方式。

  1. 除非是一些非常边缘的情况下,我不处理存储库或数据源下的处置。
  2. 如果我的存储库使用Rx,我只是将我所有的Rx实体(Completable's, Single's等)暴露给消费者(通常是视图模型),他们订阅,他们管理处置(在许多情况下,通过在 onCleared)
  3. 如果我的分页数据源使用的是Rx(顺便说一下,在无效化过程中会造成不必要的UI效果,最好在数据源中运行阻塞操作。loadInitial 和方法一样),我正在路由 CompositeDisposable 从视图模型通过数据源工厂的实例。
© www.soinside.com 2019 - 2024. All rights reserved.