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() + );
}
});
希望以上内容對大家能有幫助