RxJavaAndroid监视在不同时间触发的多个订阅者的进度

RxJavaAndroid监视在不同时间触发的多个订阅者的进度,第1张

概述我正在寻找一种方法,希望使用RxJava来保持一致性,以监视可能在不同时间触发的多个订户的进度.我知道如何从一个方法中将所有用户同时触发后将它们合并或合并在一起,但是我不知道在不同时间从不同方法中触发它们时会采用哪种方法.例如,如果我有2个长时间运行的任务附加到按钮按下上

我正在寻找一种方法,希望使用RxJava来保持一致性,以监视可能在不同时间触发的多个订户的进度.我知道如何从一个方法中将所有用户同时触发后将它们合并或合并在一起,但是我不知道在不同时间从不同方法中触发它们时会采用哪种方法.

例如,如果我有2个长时间运行的任务附加到按钮按下上.我按下按钮1并触发可观察者/用户,在运行的一半途中,我按下按钮2来触发第二个观察者/用户.

我想在没有任务运行时启用按钮,而在一个或多个任务运行时禁用按钮.

这可能吗?我试图避免也设置实例变量标志.

解决方法:

我将使用单独的BehaviorSubject并进行扫描以监视执行状态.这与实例变量非常相似,但可能可以激发您寻求更好的解决方案.像这样:

private final BehaviorSubject<Integer> mProgressSubject = BehaviorSubject.create(0);public  Observable<String> firstLongRunningOperations() {    return Observable.just("First")            .doOnSubscribe(() -> mProgressSubject.onNext(1))            .finallyDo(() -> mProgressSubject.onNext(-1)));}public  Observable<String> secondLongRunningOperations() {    return Observable.just("Second")            .doOnSubscribe(() -> mProgressSubject.onNext(1))            .finallyDo(() -> mProgressSubject.onNext(-1));}public Observable<Boolean> isOperationInProgress() {    return mProgressSubject.asObservable()            .scan((sum, item) -> sum + item)            .map(sum -> sum > 0);}

用法如下:

isOperationInProgress()        .subscribe(inProgress -> {            if (inProgress) {                //disable controls            } else {                //enable controls            }        });

使用这种方法,您可以进行许多长时间运行的 *** 作,而不必全部解雇.只是不要忘记调用doOnSubscribe和finallyDo.

PS.抱歉,我没有对其进行测试,但是应该可以.

总结

以上是内存溢出为你收集整理的RxJava / Android监视在不同时间触发的多个订阅者的进度全部内容,希望文章能够帮你解决RxJava / Android监视在不同时间触发的多个订阅者的进度所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1120584.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存