在扩大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");
}
});
}
}
答案 0 :(得分:0)
Delay 运算符在另一个线程中执行。因此,执行的其余部分不会等待这一操作完成。