基于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
  • asp之家 软件编程 m.aspxhome.com