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