基于Rxjava實現(xiàn)輪詢定時器
本文實例為大家分享了Rxjava實現(xiàn)輪詢定時器的具體代碼,供大家參考,具體內(nèi)容如下
作用
1、實現(xiàn)了延遲若干毫秒后,執(zhí)行next操作,只執(zhí)行一次
2、實現(xiàn)了每隔若干毫秒后,執(zhí)行next操作,可執(zhí)行多次
工具類源碼
/**
* 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實現(xiàn)輪詢定時器.
*
* @author xuzhuyun
*/
public class RxTimerUtil {
private static Disposable mDisposable;
/**
* milliseconds毫秒后執(zhí)行next操作
*/
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) {
//取消訂閱
cancel();
}
@Override
public void onComplete() {
//取消訂閱
cancel();
}
});
}
/**
* 每隔milliseconds毫秒后執(zhí)行next操作
*/
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() {
}
});
}
/**
* 取消訂閱
*/
public static void cancel() {
if (mDisposable != null && !mDisposable.isDisposed()) {
mDisposable.dispose();
LogUtils.e("====Rx定時器取消======");
}
}
public interface IRxNext {
void doNext(long number);
}
}
調(diào)用
調(diào)用時相應(yīng)的類需要實現(xiàn)IRxNext接口,在doNext方法中實現(xiàn)自己的邏輯即可。另外記得用完后調(diào)用cancel方法取消訂閱。
致謝
原文出處已經(jīng)找不到了,在此感謝原作者。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java?常規(guī)輪詢長輪詢Long?polling實現(xiàn)示例詳解
- Java實現(xiàn)一個簡單的長輪詢的示例代碼
- Java servlet通過事件驅(qū)動進行高性能長輪詢詳解
- Java?輪詢鎖使用時遇到問題解決方案
- Java?死鎖解決方案順序鎖和輪詢鎖
- Java實現(xiàn)平滑加權(quán)輪詢算法之降權(quán)和提權(quán)詳解
- Java負(fù)載均衡算法實現(xiàn)之輪詢和加權(quán)輪詢
- Java如何使用ReentrantLock實現(xiàn)長輪詢
- Java 利用DeferredResult實現(xiàn)http輪詢實時返回數(shù)據(jù)接口
- 告別無盡等待:Java中的輪詢終止技巧
相關(guān)文章
詳解Android?Flutter如何使用相機實現(xiàn)拍攝照片
在app中使用相機肯定是再平常不過的一項事情了,相機肯定涉及到了底層原生代碼的調(diào)用,那么在flutter中如何快速簡單的使用上相機的功能呢?一起來看看吧2023-04-04
PopupWindow+RecyclerView實現(xiàn)上下滑動框功能
這篇文章主要為大家詳細(xì)介紹了PopupWindow+RecyclerView實現(xiàn)上下滑動框功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07
Android實現(xiàn)網(wǎng)絡(luò)多線程斷點續(xù)傳下載功能
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)網(wǎng)絡(luò)多線程斷點續(xù)傳下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03

