前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxJava2操作符之“Debounce”

RxJava2操作符之“Debounce”

作者头像
坑吭吭
发布2018-08-31 17:31:04
1.1K0
发布2018-08-31 17:31:04
举报

作用

debounce:防抖; only emit an item from an Observable if a particular time-span has passed without it emitting another item, 当一个事件发送出来之后,在约定时间内没有再次发送这个事件,则发射这个事件,如果再次触发了,则重新计算时间。

应用场景举例

需求:在Edittext上添加监听,当里面输入的内容变化后进行搜索。换句话说就是当用户的输入操作停止几秒钟之后再去搜索。

示例原理用法

先看一下debounce方法的使用方法:

代码语言:javascript
复制
        getObservable()
                // 设置时间为0.5秒
                .debounce(500, TimeUnit.MILLISECONDS)
                // Run on a background thread
                .subscribeOn(Schedulers.io())
                // Be notified on the main thread
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(getObserver());//这块观察者不重要

首先模拟一个被观察者

代码语言:javascript
复制
    private Observable<Integer> getObservable() {
        return Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                // send events with simulated time wait
                emitter.onNext(1); // skip
                Thread.sleep(400);
                emitter.onNext(2); // deliver
                Thread.sleep(505);
                emitter.onNext(3); // skip
                Thread.sleep(100);
                emitter.onNext(4); // deliver
                Thread.sleep(605);
                emitter.onNext(5); // deliver
                Thread.sleep(510);
                emitter.onComplete();
            }
        });
    }

运行结果

“2”,“4”,“5”

分析

关键部分看被观察者这块; 第一个事件1发送出来以后过了400毫秒后发送出了第二个事件,此时不事件1不满足时间的条件被遗弃,然后重新计时; 2发出后休眠了505毫秒,超过了500毫秒,所以2被发射了出来,被观察者收到; 3发出来后又过了100毫秒4发出来,所以3被遗弃,从4重新计时,后又过了605毫秒下一个事件才发出,所以4被发射了出来; 同理,5之后的0.5秒内也没有再发出别的事件,所以最终5也被发射了出来。

类似一个弹簧,如果一个事件相当于挤压它一下的话,它回到初始状态需要一段时间,那如果一直有事件不断的挤压它,那它一直回不到初始状态,就一个事件也弹不出来。一旦有一段时间里面没有人挤压它,他就把最后一个弹出来了。周而复始

总结

这个系列只有干货,如果大家有什么好的建议的话欢迎在下面评论。或者觉得我哪里写的不够形象了,同样可以提出来。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.04.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作用
  • 应用场景举例
  • 示例原理用法
  • 运行结果
  • 分析
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档