日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

RxJava debounce()和throttleWithTimeout()

發(fā)布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RxJava debounce()和throttleWithTimeout() 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

debounce :防抖動

throttleWithTimeout:節(jié)流超時

debounce 和?throttleWithTimeout 點擊查看詳情都跳轉(zhuǎn)到同一個界面 作用大致一樣,

但是看源碼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);}

?百度很久才找到發(fā)現(xiàn)

Schedulers.computation()–此調(diào)度程序可用于執(zhí)行CPU密集型操作,如處理大量數(shù)據(jù)、位圖處理等,使用此調(diào)度程序創(chuàng)建的線程數(shù)完全取決于可用的CPU內(nèi)核數(shù)。

不過2這的作用是相同的....

debounce?

意思是:?發(fā)送數(shù)據(jù)事件時,若發(fā)送事件的間隔小于debounce?指定時間,就會丟棄前一次的數(shù)據(jù),時間大于debounce?指定之間才會發(fā)送

上面圖片 看不明白把,其實我剛開始也是看不明白,寫一個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);//這個無論怎么設(shè)置都輸入 最后一個都輸出 奇怪了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事件作出響應(yīng):" + integer);}@Overridepublic void onError(Throwable e) {Log.d("-----rxjava", "對Error事件作出響應(yīng)" + e);}@Overridepublic void onComplete() {Log.d("-----rxjava", "對onComplete事件作出響應(yīng)");}});

打印的結(jié)果如下圖?

希望上面的代碼和解釋你能明白

在看看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);//這個無論怎么設(shè)置都輸入 最后一個都輸出 奇怪了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事件作出響應(yīng):" + integer);}@Overridepublic void onError(Throwable e) {Log.d("-----rxjava", "對Error事件作出響應(yīng)" + e);}@Overridepublic void onComplete() {Log.d("-----rxjava", "對onComplete事件作出響應(yīng)");}});

輸入結(jié)果一樣

經(jīng)過測試發(fā)現(xiàn) 最后一個值 無論時間設(shè)置多少,或者是不設(shè)置,最后一個數(shù)都會輸出的, 要注意下哈,這也是記錄的原因.

總結(jié)

以上是生活随笔為你收集整理的RxJava debounce()和throttleWithTimeout()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。