一、描述
仅在过了一段指定的时间还没发射数据时才发射一个数据。
Debounce操作符会过滤掉发射速率过快的数据项。
RxJava将这个操作符实现为throttleWithTimeout和debounce。
注意:这个操作符会会接着最后一项数据发射原始Observable的onCompleted通知,即使这个通知发生在你指定的时间窗口内(从最后一项数据的发射算起)。也就是说,onCompleted通知不会触发限流。
二、示意图
三、示例代码
1 | Observable.create(new Observable.OnSubscribe<Integer>() { |
由于1-4这四个数值,间隔时间(分别为100ms,200ms,300ms,400ms)均不大于debounce限制的值(400ms),所以均被过滤掉,只有后面发射的时间间隔大于400ms的(分别为500ms-900ms),才会正常发射。
四、运行结果
1 | onNext: 5 |
项目代码已上传到Github:https://github.com/SherlockShi/RxJavaBestPractise
五、更多
跟debounce相关的操作符还有:
- throttleWithTimeout(long,TimeUnit) 和 debounce(long,TimeUnit)
- throttleWithTimeout(long,TimeUnit,Scheduler) 和 debounce(long,TimeUnit,Scheduler)
详情可查阅下面的参考资料。
六、参考资料
PS:欢迎关注 SherlockShi 个人博客