我有一个每 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/