作用

debounce:防抖;

only emit an item from an Observable if a particular time-span has passed without it emitting another item,

当一个事件发送出来之后,在约定时间内没有再次发送这个事件,则发射这个事件,如果再次触发了,则重新计算时间。

应用场景举例

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

示例原理用法

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

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());//这块观察者不重要

首先模拟一个被观察者

private Observable getObservable() {

return Observable.create(new ObservableOnSubscribe() {

@Override

public void subscribe(ObservableEmitter 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也被发射了出来。

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

总结

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

java实现debounce_RxJava2操作符之“Debounce”相关推荐

  1. java 1%10_Java 操作符与运算符详解

    一.赋值操作符 1 有哪些赋值操作符 2 需要注意的地方 1) a+=b; ==> a = a+b; a-=b; ==>a = a-b; a =-b;//注意这里-不要写在=的后面 2) ...

  2. java学习之操作符

    编写代码如下: package 第1章.java概要;public class _2_操作符 {//算术操作符public static void testArithmeticOperator(){i ...

  3. java 5%3_【Java】位操作符-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    位运算符java支持的位运算符有7个,分为两类:位逻辑运算和移位运算.位逻辑运算符包括按位取反(~).按位与( ).按位或(|)和按位异或(^)4种,.移位运算符包括左移( ).右移( )和无符号右移 ...

  4. 重学Java(四):操作符

    之前我写了一篇<重学Java(四):对象.引用.堆.栈.堆栈>,本以为凭借自己8年的Java编程经验足够把这些"吃人"的Java名词解释清楚了,但有网友不以为然,在文章 ...

  5. Java学习之操作符(三)

    注:本博客内容是本人在看<Jave编程思想>这本书时从该书上抄录下来的一些片段.这里也强烈建议各位读者去购买这本书进行阅读学习. 一.Java操作符 操作符接受一个或多个参数,并生成一个新 ...

  6. java中的操作符(位操作符>>与>>>的区别)

    本人学习地址:JAVA自学网站HOW2J package operateTest;//import java.util.Scanner;public class OperateTest {public ...

  7. [改善Java代码]三元操作符的类型务必一致

    建议三: 三元操作符是if-else的简化写法,在项目中使用它的地方很多,也非常好用,但是好用又简单的东西并不表示就可以随便用,我们来看看下面这段代码: 1 public class Client { ...

  8. 生怕认可java+flatmap,RxJava 操作符flatMap 与 concatMap详解

    本文独家发布到公众号:Android技术杂货铺 封面图-pixabay 近两年来,RxJava可以说是异常的火爆,受到众多开发者的追捧与青睐,虽然后入门的门槛较高,学习成本较大,但是还是掀起一场学习R ...

  9. java 去重复值 按位_详解Java的按位操作符

    Java的位操作符用来操作整数基本数据类型中的单个"比特"(bit),即代进制位.而我们知道比特就是0和1,那么,位操作就是对这些数据进行基本的操作.如果基本类型是char.byt ...

最新文章

  1. python中非怎么表示_Python中非英语文本的标记化
  2. 博科300交换机不中断(non-disruptive)固件升级
  3. 【收藏】使用Docker搭建MySQL服务
  4. web渗透之前端基础
  5. 1231 sqlserver_sqlserver 删除表中 指定字符串
  6. MySQL登录后显示mariadb_mysql/mariadb学习记录——连接查询(JOIN)
  7. 【数字图像处理】Canny边缘检测详解及编程实现
  8. 蓝桥杯 ADV-83算法提高 寻找三位数
  9. eclipse java环境配置
  10. [c++primer][12]类
  11. 【不积跬步,无以致千里】五个常用的Linux监控脚本代码
  12. 10个经典Python爬虫入门实例!你还不知道吗
  13. 征信报告 加密文档_Secret Folder for Mac(文件加密隐藏软件)
  14. 【数据分析自学】二、Excel基础知识
  15. 功放限幅保护_功放限幅电路的制作方法
  16. 河南第十届ACM省赛-E-八纵八横
  17. 监督学习、无监督学习、半监督学习和强化学习
  18. 连接服务器绑定信息无效,警告:ldap_bind():无法绑定到服务器:凭据无效PHP和LDAP...
  19. 与二次元老婆邂逅的游戏的创建过程(一)
  20. 如何把视频或者音频转成文字

热门文章

  1. ionic3 Bug收集
  2. 升级xcode14 和 ios16后的踩一些坑,持续更新(2022.11.18 15.40)
  3. MathType公式对齐不正确
  4. 关于QQ能用,网页打不开的问题之总结
  5. xingtai-三国迷的考验
  6. LFM信号加噪、时频分析、滤波
  7. 资金表实现过程方案一:资金表与冻结表合并(一)
  8. HTML炉石传说作品,《炉石传说》迷你合集再出新作:2000金币即可兑换全套卡牌...
  9. 关于canvas插入gif动图的替代方案
  10. 网络工程师必背,OSPF中的一类LSA是什么