android - 最小化应用程序时如何停止 rxjava 重复

标签 android retrofit2 mvp rx-java2

我有一个每 10 秒重复一次的网络调用。如何在应用程序最小化时停止通话?

注意:这是使用 RxJava 和 Retrofit 的 MVP。

注意:嵌套调用是为了防止第一次调用耗时10秒。

注意:这是一个单一的,而不是一个可观察的。

dataManager.getAnimalsList()     <-----------------call #1   
                .doOnSuccess(coins -> dataManager
                        .getAnimalsList()     <-----------------call #2
                        .delay(10, TimeUnit.SECONDS).repeat()
                        .compose(SchedulerUtils.ioToMain())
                        .subscribe(
                                coinItems -> {
                                    getView().showProgress(false);
                                    getView().showCoinList(coinItems);
                                },
                                throwable -> {
                                    getView().showProgress(false);
                                    getView().showError(throwable);
                                }))
                .compose(SchedulerUtils.ioToMain())
                .subscribe(
                        coinItems -> {
                            getView().showProgress(false);
                            getView().showCoinList(coinItems);
                        },
                        throwable -> {
                            getView().showProgress(false);
                            getView().showError(throwable);
                        });

最佳答案

我不会做嵌套订阅,我觉得不推荐。 我会围绕 Observable.interval() 构建我的代码并跟踪应用程序状态,如果您想停止刷新列表,只需确保 isApplicationVisible() 返回正确的 bool 值.

Observable.interval(10, TimeUnit.SECONDS)
        .filter(__ -> isApplicationVisible())
        .flatMapSingle(__ -> dataManager.getAnimalsList())
        .subscribe(animalList -> {
            System.out.println(Arrays.toString(animalList.toArray()));
            // do whatever
        });

用你的代码它会是这样的

Observable.interval(10, TimeUnit.SECONDS)   
                .filter(__ -> isApplicationVisible())   
                .flatMapSingle(__ -> dataManager.getAnimalsList())
                .compose(SchedulerUtils.ioToMain())
                .subscribe(coinItems -> {
                            getView().showProgress(false);
                            getView().showCoinList(coinItems);
                        },
                        throwable -> {
                            getView().showProgress(false);
                            getView().showError(throwable);
                        });

关于android - 最小化应用程序时如何停止 rxjava 重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48630076/

相关文章:

java - 出现 "snoozing"警报问题

java - 在 Android 上使用超链接 API 的最佳方式是什么?

android - 使用 Mockito 进行单元测试 Retrofit api 调用 - ArgumentCaptor

具有 ViewPager Presenter 生命周期的 Android MVP

android - 应用已在 Play 商店发布,但未显示在平板电脑上

android - 无需配对的蓝牙连接

java - 为什么这个类要参与连载

java - Retrofit无法从firebase数据库获取数据

Android MVP - Activity 应该是 View 还是 Presenter?

asp.net - 架构设计良好的 ASP.NET WebForms 站点示例