RxJava 定时器,永远重复,可以随时重启和停止
RxJava timer that repeats forever, and can be restarted and stopped at anytime
在android中,我使用定时器执行每5秒重复一次并在1秒后以这种方式开始的任务:
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Here is the repeated task
}
}, /*Start after*/1000, /*Repeats every*/5000);
// here i stop the timer
timer.cancel();
此计时器将重复直到我调用 timer.cancel()
我正在学习带有 RxAndroid 扩展的 RxJava
所以我在网上找到了这个代码,我试了一下,但没有重复:
Observable.timer(3000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
// here is the task that should repeat
}
});
那么 RxJava 中 android 计时器的替代方案是什么。
timer 运算符在指定的延迟后发出一个项目然后完成。我认为您正在寻找 interval 运算符。
Subscription subscription = Observable.interval(1000, 5000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Long>() {
public void call(Long aLong) {
// here is the task that should repeat
}
});
如果你想停止它,你只需在订阅上调用取消订阅:
subscription.unsubscribe()
调用Observable.repeat()
方法重复
Disposable disposable = Observable.timer(3000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.newThread())
.repeat()
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
如果您想停止它,请致电 disposable.dispose()
KOTLIN way
Observable.timer(5000, TimeUnit.MILLISECONDS)
.repeat() //to perform your task every 5 seconds
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
Log.d("ComingHere", "Inside_Timer")
}
这是 %100 正确且安全的工作方式:
//timer variable is in seconds unit
int timer = 5;
Disposable disposable = Observable.interval(timer, TimeUnit.SECONDS)
.map((tick) -> {
handler.post(() -> {
//Enter your CODE here !!!
});
return true;
}).subscribe();
为了阻止它:
if (disposable != null) {
disposable.dispose();
}
在android中,我使用定时器执行每5秒重复一次并在1秒后以这种方式开始的任务:
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Here is the repeated task
}
}, /*Start after*/1000, /*Repeats every*/5000);
// here i stop the timer
timer.cancel();
此计时器将重复直到我调用 timer.cancel()
我正在学习带有 RxAndroid 扩展的 RxJava
所以我在网上找到了这个代码,我试了一下,但没有重复:
Observable.timer(3000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
// here is the task that should repeat
}
});
那么 RxJava 中 android 计时器的替代方案是什么。
timer 运算符在指定的延迟后发出一个项目然后完成。我认为您正在寻找 interval 运算符。
Subscription subscription = Observable.interval(1000, 5000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Long>() {
public void call(Long aLong) {
// here is the task that should repeat
}
});
如果你想停止它,你只需在订阅上调用取消订阅:
subscription.unsubscribe()
调用Observable.repeat()
方法重复
Disposable disposable = Observable.timer(3000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.newThread())
.repeat()
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
如果您想停止它,请致电 disposable.dispose()
KOTLIN way
Observable.timer(5000, TimeUnit.MILLISECONDS)
.repeat() //to perform your task every 5 seconds
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
Log.d("ComingHere", "Inside_Timer")
}
这是 %100 正确且安全的工作方式:
//timer variable is in seconds unit
int timer = 5;
Disposable disposable = Observable.interval(timer, TimeUnit.SECONDS)
.map((tick) -> {
handler.post(() -> {
//Enter your CODE here !!!
});
return true;
}).subscribe();
为了阻止它:
if (disposable != null) {
disposable.dispose();
}