轻松实现Rxjava定时器功能

作者:MillerKevin 时间:2022-03-12 06:23:27 

使用RxJava实现定时器功能可以通过两种方式来实现,具体实现如下:

一、使用 timer 操作符


private Disposable mDisposable;

/**
 * 启动定时器
 */
public void startTime() {

Observable.timer(10, TimeUnit.SECONDS)
   .subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread())
   .subscribe(new Observer<Long>() {
    @Override
    public void onSubscribe(Disposable d) {
     mDisposable = d;
    }

@Override
    public void onNext(Long value) {
     //Log.d("Timer",""+value);
    }

@Override
    public void onError(Throwable e) {

}

@Override
    public void onComplete() {
     // TODO:2017/12/1
     closeTimer();
    }
   });
}

/**
 * 关闭定时器
 */
public void closeTimer(){
 if (mDisposable != null) {
  mDisposable.dispose();
 }
}

二、使用使用 interval 和 take 操作符

在1.x 中 timer 可以执行间隔逻辑,在2.x中此功能已过时,交给了 interval 操作符,当然只使用 interval 还不能实现定时器功能,必须再结合take 操作符。具体代码如下:


private Disposable mDisposable;

/**
 * 启动定时器
 */
public void startTime() {
 int count_time = 10; //总时间
 Observable.interval(0, 1, TimeUnit.SECONDS)
   .take(count_time+1)//设置总共发送的次数
   .map(new Function<Long, Long>() {
    @Override
    public Long apply(Long aLong) throws Exception {
     //aLong从0开始
     return count_time-aLong;
    }
   })
   .subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread())
   .subscribe(new Observer<Long>() {
    @Override
    public void onSubscribe(Disposable d) {
     mDisposable = d;
    }

@Override
    public void onNext(Long value) {
     //Log.d("Timer",""+value);
    }

@Override
    public void onError(Throwable e) {

}

@Override
    public void onComplete() {
     // TODO:2017/12/1
     closeTimer();
    }
   });
}

/**
 * 关闭定时器
 */
public void closeTimer(){
 if (mDisposable != null) {
  mDisposable.dispose();
 }
}

来源:https://blog.csdn.net/MillerKevin/article/details/78890375

标签:RxJava,定时器
0
投稿

猜你喜欢

  • Java使用ThreadLocal实现当前登录信息的存取功能

    2023-06-06 12:00:34
  • Java特性之注解和异常 Throwable

    2023-04-22 13:14:53
  • 详解java为什么不允许类多重继承却允许接口多重继承

    2022-12-26 03:25:57
  • Java实现的微信公众号获取微信用户信息示例

    2022-04-25 15:15:29
  • 在winform下实现左右布局多窗口界面的方法

    2023-02-23 11:31:51
  • 如何将Object类转换为实体类

    2021-11-05 04:45:11
  • Android仿百度图片查看功能

    2023-09-26 07:50:24
  • java实现Base64加密解密算法

    2023-11-25 08:07:27
  • java io文件操作从文件读取数据的六种方法

    2023-05-17 02:54:40
  • Java 中责任链模式实现的三种方式

    2023-11-08 14:32:31
  • MyBatis自定义映射关系和关联查询实现方法详解

    2021-12-18 21:25:28
  • Android自定义控件绘制基本图形基础入门

    2023-06-23 07:19:04
  • C#调用dll报错:无法加载dll,找不到指定模块的解决

    2023-08-23 23:36:12
  • SSH框架网上商城项目第8战之查询和删除商品类别功能实现

    2023-02-12 05:54:39
  • Maven的porfile与SpringBoot的profile结合使用案例详解

    2023-11-14 00:07:59
  • Java设计模式之抽象工厂模式实例详解

    2023-11-29 04:04:57
  • Spring Native项目实战(体验79毫秒启动springboot应用)

    2022-03-14 22:18:42
  • es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    2023-12-06 07:34:14
  • 深入理解Java中的接口

    2023-11-08 23:52:43
  • Android自定义带圆点的半圆形进度条

    2023-08-05 07:47:15
  • asp之家 软件编程 m.aspxhome.com