Android中怎样正确使用RXJava-debounce操作符和RXBind进行防抖动

本文探讨了如何避免Observable.create重复创建观察者导致的事件多次响应,通过调整事件监听和Observable的创建位置,实现真正的防抖效果。通过实例演示了如何使用RxView的debounce简化防抖处理,并推荐关注源码理解原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按照一般写法大家都会这样写

随便写了一个按钮去点击,然后在onClick中去使用Observable创建一个被观察者,然后使用debounce操作符去进行响应,1秒钟只响应一次结果,然后在accept中去输出值,我们此时去观察打印的时间

这是为什么呢,其实啊只要仔细的看几遍这段代码就会发现问题所在,每次我们点击的时候都会去响应onClick事件,那么Observable.create是不是每次都会执行,其实就是每次都新创建了一个新的观察者,那么再次点击就还是第一次执行debounce操作符的逻辑,

每次都是第一次,所以每次都会去响应输出事件。那正确的代码应该怎么去写呢,请看下图

我们把Observable的代码和setOnClickListener的代码置换一下位置,此时再去点击五次按钮,然后看输出打印结果,就会发现只有一次输出,证明只响应了一次。

那么一般情况下我们就按照这种方式去处理防抖动事件就可以了。当然也可以使用RXBind去处理防抖动,里面的高度封装更是直接让我们省略了setOnClickListener的监听过程直接一行代码都可以处理完了

 RxView.clicks(llLocation).debounce(400, TimeUnit.MILLISECONDS).subscribeOn(AndroidSchedulers.mainThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Object>() {
            @Override
            public void accept(Object o) throws Exception {
                
            }
        });

是不是很简单,哈哈哈大胆的去使用吧,真的比我们自己写逻辑去处理抖动事件简单的多。前人造好了轮子,我们去使用的同时记得要关注一下大牛们是怎么实现的哦,以后再带大家去读源码~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值