【问题标题】:Disposing Observable Inside Android Paging Library Data Source在 Android 分页库数据源中处理 Observable
【发布时间】:2020-05-31 07:26:32
【问题描述】:

我想观察我的 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 订阅,它们都对数据执行不同的操作。 Repository 将远程模型转换为演示者模型,然后...

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

【问题讨论】:

    标签: android kotlin rx-java2 android-paging


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。这似乎是一个合理的方法。如果没有更好的结果,我稍后会接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    相关资源
    最近更新 更多