You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:12:02