У меня есть список Flowables, который работает так:
Flowable.concatArray(Tasks.values().toArray(new Flowable[]{}))
.subscribeOn(Schedulers.single())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
Мне нужно запускать его каждые 60 секунд, но я не уверен, как проверить, была ли эта цепочка запущена и завершена ранее. Какой механизм я могу использовать для этого? Я использовал этот код, чтобы запустить его один раз последовательно (отсюда Schedulers.single ()), но не уверен, как проверить, что цепочка закончилась.
Один способ, который приходит на ум, - это что-то вроде этого:
private Subject<Integer> TasksStatus = PublishSubject.create();
Observable.combineLatest(Observable.interval(30, TimeUnit.SECONDS), TasksStatus, (TaskPeriod, Status) -> new Object[]{TaskPeriod, Status}).subscribe(
Parameters -> {
int Status = (int) Parameters[1];
if (Status == 2) {
TasksStatus.onNext(1);
Flowable.concatArray(Tasks.values().toArray(new Flowable[]{}))
.subscribeOn(Schedulers.single()).doOnComplete(() -> {
Log.d(getClass().getSimpleName(), "Chain has finished");
TasksStatus.onNext(2);
}).subscribe();
}
});
// Set it as completed at the beginning
TasksStatus.onNext(2);
Но по какой-то причине он не запускает цепь.