RxJava debounce()和throttleWithTimeout()
官方地址: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()相关推荐
- 如何形象地描述 RxJava 中的背压和流控机制?
之前我在知乎上受邀回答过一个关于RxJava背压(Backpressure)机制的问题,今天我把它整理出来,希望对更多的人能有帮助. RxJava的官方文档中对于背压(Backpressure)机制比 ...
- Android RxJava 2.0中backpressure(背压)概念的理解
英文原文:https://github.com/ReactiveX/RxJava/wiki/Backpressure Backpressure(背压.反压力) 在rxjava中会经常遇到一种情况就是被 ...
- rxjava背压_如何形象地描述RxJava中的背压和流控机制?
之前我在知乎上受邀回答过一个关于RxJava背压(Backpressure)机制的问题,今天我把它整理出来,希望对更多的人能有帮助. RxJava的官方文档中对于背压(Backpressure)机制比 ...
- RxJava 2.0中backpressure(背压)概念的理解
英文原文:https://github.com/ReactiveX/RxJava/wiki/Backpressure Backpressure(背压.反压力) 在rxjava中会经常遇到一种情况就是被 ...
- 背压(Backpressure)机制
首先,从大的方面说,这篇文档的名字,虽然叫"Backpressure"(背压),但却是在讲述一个更大的话题,"Flow Control"(流控).Backpre ...
- RxJava(七) 使用 debounce 操作符优化 App 搜索功能
RxJava 系列文章目录导读: 一.RxJava create 操作符的用法和源码分析 二.RxJava map 操作符用法详解 三.RxJava flatMap 操作符用法详解 四.RxJava ...
- RxJava过滤操作符 debounce
debounce操作符是对源Observable间隔期产生的结果进行过滤,如果在这个规定的间隔期内没有别的结果产生,则将这个结果提交给订阅者,否则忽略该结果,原理有点像光学防抖. .debounce( ...
- RxJava响应式编程学习笔记
1.概述 RxJava是一个著名的开源库,是ReactiveX(Reactive Extensions)的一种java实现.ReactiveX是一种响应式扩展框架,有很多实现,如RxAndroid,R ...
- retrofit content-length为0_大佬们,一波RxJava 3.0来袭,请做好准备~
本文作者 作者:新小梦 链接: https://juejin.im/post/5d1eeffe6fb9a07f0870b4e8 本文由作者授权发布. 0前言 每个Android开发者,都是爱RxJav ...
最新文章
- python 同时给多个变量赋值
- 虚拟桌面最佳组合---Windows 7
- 优米网:创业传记——傅盛
- Mysql流程控制结构
- php文件用什么浏览,什么是PHP文件 php文件用什么打开
- 笔试题??智商题??(一)
- c++中用new和不用new创建对象的本质区别
- pythonurllib标准_Python标准库学习笔记 urllib模块
- dblink查询_分库数据如何查询统计
- 【C++ 与 STL】双端队列:deque
- zw版【转发·台湾nvp系列Delphi例程】HALCON HistoToThresh1
- Keras深度学习实战(2)——使用Keras构建神经网络
- 常量表达式(constexpr)
- Apache Jmeter压力测试
- .net chart控件的使用技巧
- C#调用报表生成器成功案例示例研究
- Excel文件损坏打不开的常见原因及解决方法
- 十款浏览器插件,让你拥有更好的浏览器体验
- InternImage
- Cassandra repair 工具使用