RxJava interval 轮询 取消
因为最近在使用RxJava 所以将自己所学到的一些小知识拿来和大家分享:
interval 是一种是每隔一段时间就产生一个数字,没有结束符,也就是是可以产生无限个连续的数字
其流程实例如下
使用方法如下
//每隔两秒产生一个数字
Observable.timer(2, 2, 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:0
Next:1
Next:2
Next:3
……
注意:
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(40, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
if (aLong > 100) {
mSubscription.unsubscribe();
return;
}
mProgressButton.setProgress(mProgressButton.getProgress() + 1);
}
});
希望以上内容对大家能有帮助