Implementation of Polling Timer Based on Rxjava
- 2021-09-12 02:15:50
- OfStack
In this paper, we share the specific code of Rxjava polling timer for your reference, the specific contents are as follows
Action
1. After a delay of several milliseconds, the next operation is executed only once
2. After several milliseconds, the next operation can be executed many times
Tool class source code
/**
* Copyright 2015-2018 Hive Box.
*/
package com.fcbox.locker.shrail.utils;
import android.support.annotation.NonNull;
import com.fcbox.locker.sdk.Locker;
import com.fcbox.locker.sdk.log.LogUtils;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
/**
* Rxjava2.x Implement a polling timer .
*
* @author xuzhuyun
*/
public class RxTimerUtil {
private static Disposable mDisposable;
/**
* milliseconds Execute in milliseconds next Operation
*/
public static 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) {
mDisposable = disposable;
}
@Override
public void onNext(@NonNull Long number) {
if (next != null) {
next.doNext(number);
}
}
@Override
public void onError(@NonNull Throwable e) {
// Unsubscribe
cancel();
}
@Override
public void onComplete() {
// Unsubscribe
cancel();
}
});
}
/**
* Every interval milliseconds Execute in milliseconds next Operation
*/
public static 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() {
}
});
}
/**
* Unsubscribe
*/
public static void cancel() {
if (mDisposable != null && !mDisposable.isDisposed()) {
mDisposable.dispose();
LogUtils.e("====Rx Timer cancellation ======");
}
}
public interface IRxNext {
void doNext(long number);
}
}
Call
When calling, the corresponding class needs to implement IRxNext interface, and it can implement its own logic in doNext method. Also remember to call the cancel method to unsubscribe after using it.
Acknowledgement
I can't find the source of the original text, so I would like to thank the original author.