Во время надувания представления Android я загружаю кучу вещей из фонового потока и надуваю некоторые представления, основываясь на сетевых ответах. Поэтому я пытаюсь отложить некоторые из этих задач, используя RxJava, как это
Single.fromCallable(() -> savedInstanceState)
.delay(50,TimeUnit.MICROSECONDS,AndroidSchedulers.mainThread())
.flatMapCompletable(this::loadVideos)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
Timber.d("on Subscribe");
}
@Override
public void onComplete() {
Timber.d("on onComplete");
}
@Override
public void onError(Throwable e) {
Timber.d("on onError");
}
});
И метод loadVideos выглядит так:
private Completable loadVideos(Bundle savedInstanceState) {
return Completable.fromAction(() -> {
videoPresenter.loadVideos(savedInstance);
});
}
Я обнаружил, что onSubscribe (), безусловно, вызывается, но метод videoPresenter.loadVideos
никогда не вызывается. Буду признателен, если кто-нибудь может указать, что я делаю неправильно.
Для моего тестирования я реализовал следующий тест, который, кажется, работает ...
public class DelayTest {
public static void main(String[] args) throws InterruptedException {
Single.fromCallable(() -> "hello")
.delay(50, TimeUnit.MICROSECONDS)
.flatMapCompletable(new Function<String, CompletableSource>() {
@Override
public CompletableSource apply(String s) throws Exception {
return getFlatMapCompletable();
}
})
.subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
System.out.println("In onSubscribe");
}
@Override
public void onComplete() {
System.out.println("In onComplete");
}
@Override
public void onError(Throwable e) {
System.out.println("In onError");
}
});
Thread.sleep(200L);
}
private static Completable getFlatMapCompletable() {
return Completable.fromAction(new Action() {
@Override
public void run() throws Exception {
System.out.println("In flatmapCompletable");
}
});
}
}