Android Rx:BehaviorSubject带条件的发射器定时器实现需求
解决方案:BehaviorSubject 按规则发射布尔值
针对持有BehaviorSubject<Boolean>,需要实现接收False时延迟10秒发射,接收True时立即发射并取消现有延迟定时器的需求,可通过RxJava的switchMap操作符实现,核心逻辑如下:
- 收到
true时,直接返回立即发射该值的Observable,switchMap会自动取消之前可能存在的延迟Observable - 收到
false时,返回延迟10秒后发射该值的Observable
具体代码实现:
BehaviorSubject<Boolean> subject = BehaviorSubject.createDefault(false); Observable<Boolean> transformedObservable = subject.switchMap(value -> { if (value) { // 立即发射True return Observable.just(true); } else { // 延迟10秒发射False return Observable.just(false).delay(10, TimeUnit.SECONDS); } }); // 订阅示例 transformedObservable.subscribe(System.out::println);
关键逻辑说明
switchMap的特性是:源Observable每发射新值,就会取消之前订阅的Observable,转而订阅新生成的Observable,完美匹配“收到True时取消已存在的10秒定时器”的需求。针对不同值分别处理:true直接无延迟发射,false通过delay实现10秒延迟。
内容的提问来源于stack exchange,提问作者Konstantin Konopko
相关产品推荐
相关产品推荐

