基于Rxjava实现轮询定时器
作者:hgncxzy_ 时间:2021-12-27 07:22:10
本文实例为大家分享了Rxjava实现轮询定时器的具体代码,供大家参考,具体内容如下
作用
1、实现了延迟若干毫秒后,执行next操作,只执行一次
2、实现了每隔若干毫秒后,执行next操作,可执行多次
工具类源码
/**
* 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实现轮询定时器.
*
* @author xuzhuyun
*/
public class RxTimerUtil {
private static Disposable mDisposable;
/**
* milliseconds毫秒后执行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毫秒后执行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);
}
}
调用
调用时相应的类需要实现IRxNext接口,在doNext方法中实现自己的逻辑即可。另外记得用完后调用cancel方法取消订阅。
致谢
原文出处已经找不到了,在此感谢原作者。
来源:https://blog.csdn.net/jdfkldjlkjdl/article/details/80267133
标签:Rxjava,定时器
0
投稿
猜你喜欢
详解Spring Cloud中Hystrix的请求合并
2022-07-06 14:53:06
java向多线程中传递参数的三种方法详细介绍
2023-07-11 21:52:55
为IObservable实现自己的运算符(详解)
2022-04-02 08:58:15
关于Java 中 Future 的 get 方法超时问题
2022-09-27 07:58:18
Android连接MySQL数据库并进行增删改查操作示例讲解
2023-07-03 13:20:15
Java swing实现酒店管理系统
2021-08-08 02:24:12
C# 定时器保活机制引起的内存泄露问题解决
2022-09-19 00:31:33
利用logback filter过滤某个类 屏蔽某个类
2023-07-25 20:38:08
如何构建可重复读取inputStream的request
2023-09-18 02:32:56
使用Java实现简单串口通信
2022-07-27 14:48:52
java反编译工具Bytecode-Viewer分享
2021-05-29 04:39:07
java中Unsafe的使用讲解
2022-08-02 08:08:18
Java创建多线程的两种方式对比
2023-09-14 21:02:49
Android实现仿360桌面悬浮清理内存
2021-08-25 11:21:05
C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)
2023-06-16 07:54:29
Android根据不同身份配置APP对应的不同模块方法
2023-09-25 05:22:36
C#实现绘制鼠标的示例代码
2023-06-11 04:40:54
Redisson RedLock红锁加锁实现过程及原理
2022-12-29 20:49:42
Android实现简单的分批加载ListView
2023-10-28 14:49:21
Android自定义View实现通讯录字母索引(仿微信通讯录)
2023-05-14 04:34:22