轻松实现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