2017-01-24 10 views
2

私はAndroid上RxJavaで、次を実装する:RxJava 1 Android:タイマーのシーケンスを作成するには?

クラスTimeUnitでは整数プロパティ「長さ」を持っているクラスシーケンス(TimeUnitでは、配列のリストを持っている)のリストが含まれています。

シーケンスの長さは1~10秒です。

TimeUnit run()メソッドが呼び出されると、タイマーが開始され、リスト内のfirsシーケンスが実行されます。そのシーケンス後2など

例:私は(インターバルのような多くのRxテクニックを試してみました

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 

)、concatMap()、flatMap:RxJavaでこの出力を達成するための方法

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

()...しかし成功はない。

どのようにこのためのスケルトンを設定しますか? Rxは連動することができますか?

何の解決策は、あなたがRxJavaからでないコードを少し使用して気にしない場合は、このソリューションを使用することができます

答えて

1

を働いたとして、私はcodesnippetを持っていない:

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; 
    } 

それはちょうどです例、あなたのニーズに適応する。

私は、あなたがやろうとしているのはあまり些細なことではないので、良いアプローチだと思うので、命令的なコードを少しでも傷つけることはありません。

ハッピーコーディング!

関連する問題