基于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方法取消订阅。
致谢
原文出处已经找不到了,在此感谢原作者。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。