RxJava debounce()和throttleWithTimeout()
生活随笔
收集整理的這篇文章主要介紹了
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 操作符 do