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); } }