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

How do i stop rxjava repeat when app is minimized

我有一个每 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() returns 正确的布尔值。

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);
                        });

使用 activity/fragment 生命周期来跟踪 api 调用。使用 filter 方法设置布尔标志。您可以使用一次性 Observable 来帮助您在整个生命周期中处理呼叫。 Read this blog