package com.doumee.lib_coremodel.util;
import androidx.annotation.NonNull;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import timber.log.Timber;
/**
* Instruction:Rxjava2.x实现定时器
*
* Author:pei
* Date: 2017/6/29
* Description:
*/
public class RxTimerUtil {
private Disposable mDisposable;
/** milliseconds毫秒后执行next操作
*
* @param milliseconds
* @param next
*/
public void timer(long milliseconds,final IRxNext next) {
Observable.timer(milliseconds, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
public void onSubscribe(@NonNull Disposable disposable) {
if(mDisposable!=null&&!mDisposable.isDisposed()){
mDisposable.dispose();
}
mDisposable=disposable;
}
@Override
public void onNext(@NonNull Long number) {
if(next!=null){
next.doNext(number);
}
}
@Override
public void onError(@NonNull Throwable e) {
//取消订阅
cancel();
}
@Override
public void onComplete() {
//取消订阅
cancel();
}
});
}
/** 每隔milliseconds毫秒后执行next操作
*
* @param milliseconds
* @param next
*/
public void interval(long milliseconds,final IRxNext next){
Observable.interval(milliseconds, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
public void onSubscribe(@NonNull Disposable disposable) {
mDisposable=disposable;
}
@Override
public void onNext(@NonNull Long number) {
if(next!=null){
next.doNext(number);
}
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
}
/**
* 取消订阅
*/
public void cancel(){
if(mDisposable!=null&&!mDisposable.isDisposed()){
mDisposable.dispose();
Timber.e("====定时器取消======");
}
}
public interface IRxNext{
void doNext(long number);
}
}