最小化应用程序时如何停止 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
我有一个每 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