RxMakeWorkTimer.java 2.41 KB
Newer Older
huahua committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
package live.nodiyphoneshell.cend.rxbus;
import android.content.Context;
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;
/**
 * @author MaYnaghua
 * @version 1.0.0
 * @date 2020/8/10 10:21
 */
public class RxMakeWorkTimer {

    private Disposable mDisposable;
    private static volatile RxMakeWorkTimer instance;
    private Context context;

    public static RxMakeWorkTimer getInstance(Context context) {
        if (instance == null) {
            synchronized (RxMakeWorkTimer.class) {
                if (instance == null) {
                    instance = new RxMakeWorkTimer(context);
                }
            }
        }
        return instance;
    }

    public RxMakeWorkTimer(Context context) {
        this.context = context;
    }


    /**
     * milliseconds毫秒后执行指定动作
     * @param rxAction
     */
    public void timer(long milliSeconds, RxAction rxAction) {
        Observable.timer(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 (rxAction != null) {
                            rxAction.action(number);
                        }
                        //Log.i("time",number+"");
                    }
                    @Override
                    public void onError(@NonNull Throwable e) {
                        //取消订阅
                        cancel();
                    }
                    @Override
                    public void onComplete() {
                        //取消订阅
                        cancel();
                    }
                });
    }

    /**
     * 取消订阅
     */
    public void cancel() {
        if (mDisposable != null && !mDisposable.isDisposed()) {
            mDisposable.dispose();
        }
    }

    public interface RxAction {
        /**
         * 让调用者指定指定动作
         * @param number
         */
        void action(long number);

    }

}