官方地址:http://reactivex.io/documentation/operators/debounce.html

debounce :防抖动

throttleWithTimeout:节流超时

debounce 和 throttleWithTimeout 点击查看详情都跳转到同一个界面 作用大致一样,

但是看源码debounce return 返回值多一个线程 看源码

debounce

    @CheckReturnValue@SchedulerSupport(SchedulerSupport.COMPUTATION)public final Observable<T> debounce(long timeout, TimeUnit unit) {return debounce(timeout, unit, Schedulers.computation());}

throttleWithTimeout

    @CheckReturnValue@SchedulerSupport(SchedulerSupport.COMPUTATION)public final Observable<T> throttleWithTimeout(long timeout, TimeUnit unit) {return debounce(timeout, unit);}

百度很久才找到发现

Schedulers.computation()–此调度程序可用于执行CPU密集型操作,如处理大量数据、位图处理等,使用此调度程序创建的线程数完全取决于可用的CPU内核数。

不过2这的作用是相同的....

debounce

意思是: 发送数据事件时,若发送事件的间隔小于debounce 指定时间,就会丢弃前一次的数据,时间大于debounce 指定之间才会发送

上面图片 看不明白把,其实我刚开始也是看不明白,写一个demo 把 然后在回来看看官方给的图

     Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> emitter) throws InterruptedException {emitter.onNext(1);Thread.sleep(200);emitter.onNext(2);// 1 和 2 之间时间小于debounce指定时间1 被丢弃了Thread.sleep(800);emitter.onNext(3);// 2 和 3 之间时间大于debounce指定时间2 输出了Thread.sleep(200);emitter.onNext(4);// 3 和 4 之间时间小于debounce指定时间3 被丢弃了Thread.sleep(800);emitter.onNext(5);// 4 和 5 之间时间大于debounce指定时间4 输出了Thread.sleep(800);emitter.onNext(6);// 5 和 6 之间时间大于debounce指定时间5 输出了Thread.sleep(100);//这个无论怎么设置都输入 最后一个都输出 奇怪了emitter.onComplete();
//                        for (int i=0;i<10;i++){
//                            emitter.onNext(i);
//                            Thread.sleep(i*100);
//                        }}}).debounce(500, TimeUnit.MILLISECONDS).subscribe(new Observer<Integer>() {@Overridepublic void onSubscribe(Disposable d) {Log.d("-----rxjava", "开始采用subscribe连接");}@Overridepublic void onNext(Integer integer) {Log.d("-----rxjava", "对Next事件作出响应:" + integer);}@Overridepublic void onError(Throwable e) {Log.d("-----rxjava", "对Error事件作出响应" + e);}@Overridepublic void onComplete() {Log.d("-----rxjava", "对onComplete事件作出响应");}});

打印的结果如下图

希望上面的代码和解释你能明白

在看看throttleWithTimeout

             Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> emitter) throws InterruptedException {emitter.onNext(1);Thread.sleep(200);emitter.onNext(2);// 1 和 2 之间时间小于debounce指定时间1 被丢弃了Thread.sleep(800);emitter.onNext(3);// 2 和 3 之间时间大于debounce指定时间2 输出了Thread.sleep(200);emitter.onNext(4);// 3 和 4 之间时间小于debounce指定时间3 被丢弃了Thread.sleep(800);emitter.onNext(5);// 4 和 5 之间时间大于debounce指定时间4 输出了Thread.sleep(800);emitter.onNext(6);// 5 和 6 之间时间大于debounce指定时间5 输出了Thread.sleep(100);//这个无论怎么设置都输入 最后一个都输出 奇怪了emitter.onComplete();
//                        for (int i=0;i<10;i++){
//                            emitter.onNext(i);
//                            Thread.sleep(i*100);
//                        }}}).throttleWithTimeout(500, TimeUnit.MILLISECONDS).subscribe(new Observer<Integer>() {@Overridepublic void onSubscribe(Disposable d) {Log.d("-----rxjava", "开始采用subscribe连接");}@Overridepublic void onNext(Integer integer) {Log.d("-----rxjava", "对Next事件作出响应:" + integer);}@Overridepublic void onError(Throwable e) {Log.d("-----rxjava", "对Error事件作出响应" + e);}@Overridepublic void onComplete() {Log.d("-----rxjava", "对onComplete事件作出响应");}});

输入结果一样

经过测试发现 最后一个值 无论时间设置多少,或者是不设置,最后一个数都会输出的, 要注意下哈,这也是记录的原因.

RxJava debounce()和throttleWithTimeout()相关推荐

  1. 如何形象地描述 RxJava 中的背压和流控机制?

    之前我在知乎上受邀回答过一个关于RxJava背压(Backpressure)机制的问题,今天我把它整理出来,希望对更多的人能有帮助. RxJava的官方文档中对于背压(Backpressure)机制比 ...

  2. Android RxJava 2.0中backpressure(背压)概念的理解

    英文原文:https://github.com/ReactiveX/RxJava/wiki/Backpressure Backpressure(背压.反压力) 在rxjava中会经常遇到一种情况就是被 ...

  3. rxjava背压_如何形象地描述RxJava中的背压和流控机制?

    之前我在知乎上受邀回答过一个关于RxJava背压(Backpressure)机制的问题,今天我把它整理出来,希望对更多的人能有帮助. RxJava的官方文档中对于背压(Backpressure)机制比 ...

  4. RxJava 2.0中backpressure(背压)概念的理解

    英文原文:https://github.com/ReactiveX/RxJava/wiki/Backpressure Backpressure(背压.反压力) 在rxjava中会经常遇到一种情况就是被 ...

  5. 背压(Backpressure)机制

    首先,从大的方面说,这篇文档的名字,虽然叫"Backpressure"(背压),但却是在讲述一个更大的话题,"Flow Control"(流控).Backpre ...

  6. RxJava(七) 使用 debounce 操作符优化 App 搜索功能

    RxJava 系列文章目录导读: 一.RxJava create 操作符的用法和源码分析 二.RxJava map 操作符用法详解 三.RxJava flatMap 操作符用法详解 四.RxJava ...

  7. RxJava过滤操作符 debounce

    debounce操作符是对源Observable间隔期产生的结果进行过滤,如果在这个规定的间隔期内没有别的结果产生,则将这个结果提交给订阅者,否则忽略该结果,原理有点像光学防抖. .debounce( ...

  8. RxJava响应式编程学习笔记

    1.概述 RxJava是一个著名的开源库,是ReactiveX(Reactive Extensions)的一种java实现.ReactiveX是一种响应式扩展框架,有很多实现,如RxAndroid,R ...

  9. retrofit content-length为0_大佬们,一波RxJava 3.0来袭,请做好准备~

    本文作者 作者:新小梦 链接: https://juejin.im/post/5d1eeffe6fb9a07f0870b4e8 本文由作者授权发布. 0前言 每个Android开发者,都是爱RxJav ...

最新文章

  1. python 同时给多个变量赋值
  2. 虚拟桌面最佳组合---Windows 7
  3. 优米网:创业传记——傅盛
  4. Mysql流程控制结构
  5. php文件用什么浏览,什么是PHP文件 php文件用什么打开
  6. 笔试题??智商题??(一)
  7. c++中用new和不用new创建对象的本质区别
  8. pythonurllib标准_Python标准库学习笔记 urllib模块
  9. dblink查询_分库数据如何查询统计
  10. 【C++ 与 STL】双端队列:deque
  11. zw版【转发·台湾nvp系列Delphi例程】HALCON HistoToThresh1
  12. Keras深度学习实战(2)——使用Keras构建神经网络
  13. 常量表达式(constexpr)
  14. Apache Jmeter压力测试
  15. .net chart控件的使用技巧
  16. C#调用报表生成器成功案例示例研究
  17. Excel文件损坏打不开的常见原因及解决方法
  18. 十款浏览器插件,让你拥有更好的浏览器体验
  19. InternImage
  20. Cassandra repair 工具使用

热门文章

  1. 2022-2028年中国毛纺行业研究及前瞻分析报告
  2. java转python
  3. scipy csr_matrix csc_matrix
  4. java.lang.NullPointerException异常原因及解决
  5. LeetCode简单题之统一一致字符串的数目
  6. 物联网安全只有最薄弱的环节才有保障
  7. 驾驶员行为监控系统:需要它来管理车队
  8. Android中Messenger进程间通信
  9. 2021年大数据Spark(六):环境搭建集群模式 Standalone
  10. Python 2x 中list 里面的中文打印效果乱码