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实现定时器
|
* <p>
|
* 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<Long>() {
|
@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<Long>() {
|
@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);
|
}
|
|
|
}
|