按照一般写法大家都会这样写
随便写了一个按钮去点击,然后在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 {
}
});
是不是很简单,哈哈哈大胆的去使用吧,真的比我们自己写逻辑去处理抖动事件简单的多。前人造好了轮子,我们去使用的同时记得要关注一下大牛们是怎么实现的哦,以后再带大家去读源码~