RxJava 1 Android:如何创建一系列计时器?

时间:2017-01-24 23:13:12

标签: android timer rx-java

我想在android上实现以下RxJava:

TimeUnit 包含类序列的列表(TimeUnit具有序列列表),其具有整数属性“length”。

序列的长度为1-10秒。

当调用TimeUnit run()方法时,计时器启动并执行列表中的第一个序列。之后的序列2等。

示例:

TimeUnit
  - Sequence 1 -> 10 seconds
  - Sequence 2 -> 4 seconds
  - Sequence 3 -> 5 seconds

如何在RxJava中实现此输出:

TimeUnit started
Starting "Sequence 1"
Sequence 1 -> second 1
Sequence 1 -> second 2
Sequence 1 -> second 3
...
Starting "Sequence 2"
Sequence 2 -> second 1
....
TimeUnit completed in 19 seconds

我试过很多Rx技术,比如interval(),concatMap(),flatMap()......但没有成功。

你会如何为此设置骨架? Rx能够连续间隔吗?

我没有codenippet,因为没有解决方案

1 个答案:

答案 0 :(得分:1)

如果你不介意使用一些非RxJava的代码,你可以使用这个解决方案:

public Observable<String> createObservable(TimeUnit timeUnit){
        Handler handler = new Handler();

        Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                for(Sequence sequence : TimeUnit.getSequenceList()){
                    Runnable runnable = () -> {
                        subscriber.onNext(sequence.length);
                    };

                    handler.postDelayed(runnable, sequence.lenth);
                }
            }
        });

        return observable;
    }

这只是一个例子,可以适应您的需求。

我认为这是一个很好的方法,因为你试图做的并不是很微不足道,所以一些命令性的代码不会受到伤害。

快乐的编码!