基于Rxjava实现轮询定时器
本文实例为大家分享了Rxjava实现轮询定时器的具体代码,供大家参考,具体内容如下
作用
1、实现了延迟若干毫秒后,执行next操作,只执行一次
2、实现了每隔若干毫秒后,执行next操作,可执行多次
工具类源码
/**
*Copyright2015-2018HiveBox.
*/
packagecom.fcbox.locker.shrail.utils;
importandroid.support.annotation.NonNull;
importcom.fcbox.locker.sdk.Locker;
importcom.fcbox.locker.sdk.log.LogUtils;
importjava.util.concurrent.TimeUnit;
importio.reactivex.Observable;
importio.reactivex.Observer;
importio.reactivex.android.schedulers.AndroidSchedulers;
importio.reactivex.disposables.Disposable;
/**
*Rxjava2.x实现轮询定时器.
*
*@authorxuzhuyun
*/
publicclassRxTimerUtil{
privatestaticDisposablemDisposable;
/**
*milliseconds毫秒后执行next操作
*/
publicstaticvoidtimer(longmilliseconds,finalIRxNextnext){
Observable.timer(milliseconds,TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(newObserver(){
@Override
publicvoidonSubscribe(@NonNullDisposabledisposable){
mDisposable=disposable;
}
@Override
publicvoidonNext(@NonNullLongnumber){
if(next!=null){
next.doNext(number);
}
}
@Override
publicvoidonError(@NonNullThrowablee){
//取消订阅
cancel();
}
@Override
publicvoidonComplete(){
//取消订阅
cancel();
}
});
}
/**
*每隔milliseconds毫秒后执行next操作
*/
publicstaticvoidinterval(longmilliseconds,finalIRxNextnext){
Observable.interval(milliseconds,TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(newObserver(){
@Override
publicvoidonSubscribe(@NonNullDisposabledisposable){
mDisposable=disposable;
}
@Override
publicvoidonNext(@NonNullLongnumber){
if(next!=null){
next.doNext(number);
}
}
@Override
publicvoidonError(@NonNullThrowablee){
}
@Override
publicvoidonComplete(){
}
});
}
/**
*取消订阅
*/
publicstaticvoidcancel(){
if(mDisposable!=null&&!mDisposable.isDisposed()){
mDisposable.dispose();
LogUtils.e("====Rx定时器取消======");
}
}
publicinterfaceIRxNext{
voiddoNext(longnumber);
}
}
调用
调用时相应的类需要实现IRxNext接口,在doNext方法中实现自己的逻辑即可。另外记得用完后调用cancel方法取消订阅。
致谢
原文出处已经找不到了,在此感谢原作者。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。