天天看點

RxJava interval 輪詢RxJava interval 輪詢 取消

RxJava interval 輪詢 取消

因為最近在使用RxJava 是以将自己所學到的一些小知識拿來和大家分享:

interval 是一種是每隔一段時間就産生一個數字,沒有結束符,也就是是可以産生無限個連續的數字

其流程執行個體如下

RxJava interval 輪詢RxJava interval 輪詢 取消

使用方法如下

//每隔兩秒産生一個數字
        Observable.timer(, , TimeUnit.SECONDS).subscribe(new Subscriber<Long>() {
            @Override
            public void onCompleted() {
                System.out.println("Sequence complete.");
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("error:" + e.getMessage());
            }

            @Override
            public void onNext(Long aLong) {
                System.out.println("Next:" + aLong.toString());
            }
        });
          運作結果如下: 
          Next: 
          Next: 
          Next: 
          Next: 
          ……
           

注意:

interval操作符預設情況下是運作在一個新線程上的,當然你可以通過傳入參數來修改其運作的線程。

看到上面的時候肯定有個疑問,我的輪詢怎麼停止?我這裡介紹兩種停止方式:

1:.compose()

2:unsubscribe()

1:.compose()

interval是可以跟我們的activity或fragment的生命周期來挂鈎的。隻需要我們寫的時候添加.compose(this.bindToLifecycle())就可以跟Activity來進行綁定。實作生命周期同步。也就是Activity 的 onDestroy() 方法被調用後,Observable 的訂閱關系才解除。那能不能指定在Activity其他的生命狀态和訂閱關系保持同步,答案是有的。就是 bindUntilEvent()方法

* ActivityEvent.CREATE: 在Activity的onCreate()方法執行後,解除綁定。

* ActivityEvent.START:在Activity的onStart()方法執行後,解除綁定。

* ActivityEvent.RESUME:在Activity的onResume()方法執行後,解除綁定。

* ActivityEvent.PAUSE: 在Activity的onPause()方法執行後,解除綁定。

* ActivityEvent.STOP:在Activity的onStop()方法執行後,解除綁定。

* ActivityEvent.DESTROY:在Activity的onDestroy()方法執行後,解除綁定。
           

2:使用unsubscribe()

直接接觸訂閱關系。

mSubscription = Observable.interval(, TimeUnit.MILLISECONDS)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1<Long>() {
                @Override
                public void call(Long aLong) {
                    if (aLong > ) {
                        mSubscription.unsubscribe();
                        return;
                    }
                    mProgressButton.setProgress(mProgressButton.getProgress() + );
                }
            });
           

希望以上内容對大家能有幫助