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

时间:2018-02-05 19:29:39

标签: 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);
                        });

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

使用活动/片段生命周期来跟踪api调用。使用filter方法设置布尔标志。您可以使用一次性observable来帮助您在生命周期中处理呼叫。 Read this blog