#android #rx-java #reactive-programming #android-threading
#Android #rx-java #реактивное программирование #android-многопоточность
Вопрос:
Я очень новичок в RxJava, поэтому мой вопрос может быть совершенно глупым, но я не мог понять, как это сделать.
Итак, у меня есть N заданий, которые реализуют следующий интерфейс
interface Worker {
int interval();
void job();
}
Чего я хочу добиться, так это функциональности, подобной таймеру, которая вызывает эти Worker
job()
функции s каждый раз, когда interval()
проходит время.
Что я пробовал до сих пор
Observable.fromArray(worker1, worker2)
.flatMap(worker -> Observable.just(worker).delay(worker.delay(), TimeUnit.SECONDS))
.subscribe(Worker::job);
Это сработало нормально, задания выполнялись асинхронно по истечении заданного времени.
Но это выполняется только один раз. Я понимаю, что мне нужно interval()
как-то использовать оператор, но я не мог понять это.
Заранее спасибо
Ответ №1:
Если я правильно понимаю ваш вопрос, вам нужно сделать что-то подобное:
Observable.fromArray(worker1, worker2)
.flatMap { worker ->
Observable.interval(worker.interval(), TimeUnit.SECONDS)
.flatMap { Observable.just(worker).delay(worker.delay(), TimeUnit.SECONDS) }
}
.subscribe(Worker::job)
Вы должны заметить, что в этой реализации ваши worker.job()
вызовы будут выполняться в неожиданном порядке