2017-01-24 3 views
2

Я хочу осуществить следующие с RxJava на андроид:RxJava 1 Android: Как создать последовательность таймеров?

Класс TimeUnit содержит список класса последовательности (TimeUnit имеет список последовательностей), которые имеют целочисленное свойство «длина».

Последовательности имеют длину 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 как интервал(), concatMap(), flatMap() ... но никакого успеха.

Как бы вы настроили скелет для этого? Является ли Rx конкатентными интервалами?

У меня нет codesnippet, как ни одно решение не работал

ответ

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

Это просто например, приспосабливайтесь к вашим потребностям.

Я думаю, что это хороший подход, потому что вы пытаетесь сделать это не очень тривиально, поэтому немного императивного кода не повредит.

Счастливое кодирование!