如何在rxjava中设置多个间隔

时间:2017-04-19 04:20:08

标签: android rx-java

我有一个关于将RxJava与interval运算符一起使用的场景。事实上,我可以为Job A设置间隔。就像那样

Observable
    .interval(0, 10, TimeUnit.SECONDS)
    .subscribeOn(Schedulers.newThread())
    .observeOn(AndroidSchedulers.mainThread())
    .map(new Func1<Long, List<Bean>>() {
        @Override
        public List<Bean> call(Long pLong) {
            return null;
        }
    })
    .subscribe(new Action1<List<Bean>>() {
        @Override
        public void call(List<Bean> pO) {
            if (pO.size() > 0) setData(pO);
        }
    });

但是我试图设置作业A,作业B,作业C的间隔,但它们之间的间隔不同。

工作A,工作B,工作C(30秒) 工作A - &gt; 5秒 - &gt;工作B - &gt; 10秒 - &gt;工作C

Observable
    .interval(0, 30, TimeUnit.SECONDS)
    .subscribeOn(Schedulers.newThread())
    .observeOn(AndroidSchedulers.mainThread())
    .flatMap(new Func1<Long, Observable<Long>>() {
        @Override
        public Observable<Long> call(Long pLong) {
            //Job A
            return Observable.interval(0, 5, TimeUnit.SECONDS);
        }
    })
    .flatMap(new Func1<Long, Observable<Long>>() {
        @Override
        public Observable<Long> call(Long pLong) {
            //Job B
            return Observable.interval(0, 10, TimeUnit.SECONDS);
        }
    })
    .subscribe(new Action1<Long>>() {
        @Override
        public void call(Long pO) {
            //Job C
            if (pO.size() > 0) setData(pO);
        }
    });

我试着用这样的东西但没有运气。我是Rx的新手,感谢您的任何评论。

1 个答案:

答案 0 :(得分:1)

.interval()生成一系列事件,尝试使用.timer()来触发另一个作业,或.interval()。take(1)。你将每5秒开始一次作业B(10秒)(重叠间隔?)