创建一个按固定时间间隔发射整数序列的Observable,它接受一个表示时间间隔的参数和一个表示时间单位的参数。
Observable.<String>interval(10, TimeUnit.SECONDS).subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
log(aLong + "");
}
});
while(true){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
我们看下interval调用流程
public static Observable<Long> interval(long interval, TimeUnit unit) {
return interval(interval, interval, unit, Schedulers.computation());
}
这里使用了computation类型的Scheduler
public static Observable<Long> interval(long initialDelay, long period, TimeUnit unit, Scheduler scheduler) {
return create(new OnSubscribeTimerPeriodically(initialDelay, period, unit, scheduler));
}
这里创建了一个OnSubscribeTimerPeriodically类型的Observable<Long>
接着我们看下他的call方法
public void call(final Subscriber<? super Long> child) {
final Worker worker = scheduler.createWorker();
child.add(worker);
worker.schedulePeriodically(new Action0() {
long counter;
@Override
public void call() {
try {
child.onNext(counter++);
} catch (Throwable e) {
try {
worker.unsubscribe();
} finally {
Exceptions.throwOrReport(e, child);
}
}
}
}, initialDelay, period, unit);
}
这里会调用worker周期性的执行一个Action,调用onNext方法