timer操作符既可以延迟执行一段逻辑,也可以间隔执行一段逻辑,但是已经过时了,而是由interval操作符来间隔执行.
timer延迟执行例子:如延迟5秒:
Observable.timer(5, TimeUnit.SECONDS).subscribe(new Observer<Long>() {
@Override
public void onCompleted() {
LogUtils.d("------->onCompleted");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Long aLong) {
}
});
timer间隔执行:间隔5秒执行
Observable.timer(0,5,TimeUnit.SECONDS).subscribe(new Subscriber<Long>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Long aLong) {
LogUtils.d("------>along:"+aLong+" time:"+SystemClock.elapsedRealtime());
}
});
02-19 17:27:35.683 25563-25987/com.rxandroid.test1 D/----->: ------>along:0 time:286032978
02-19 17:27:40.683 25563-25987/com.rxandroid.test1 D/----->: ------>along:1 time:286037976
02-19 17:27:45.683 25563-25987/com.rxandroid.test1 D/----->: ------>along:2 time:286042977
02-19 17:27:50.683 25563-25987/com.rxandroid.test1 D/----->: ------>along:3 time:286047976
02-19 17:27:55.683 25563-25987/com.rxandroid.test1 D/----->: ------>along:4 time:286052976
由于这种间隔执行已经标记为过时,推荐下面的方式:interval操作符:
Observable.interval(0,5,TimeUnit.SECONDS).subscribe(new Observer<Long>() {能达到同样的效果
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Long aLong) {
LogUtils.d("------>along:"+aLong+" time:"+SystemClock.elapsedRealtime());
}
});
注意timer与interval都是默认运行在一个新线程上面