Android 如何使用RxJava延迟加载项目?

Android 如何使用RxJava延迟加载项目?,android,rx-java2,Android,Rx Java2,在膨胀Android视图时,我从后台线程加载了一堆东西,并根据网络响应膨胀了一些视图。所以我尝试使用RxJava来推迟一些任务,比如 Single.fromCallable(() -> savedInstanceState) .delay(50,TimeUnit.MICROSECONDS,AndroidSchedulers.mainThread()) .flatMapCompletable(this::loadVideos)

在膨胀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");
        }
    });
}
}
公共类延迟测试{
公共静态void main(字符串[]args)引发InterruptedException{
Single.fromCallable(()->“hello”)
.延迟(50,时间单位。微秒)
.flatMapCompletable(新函数(){
@凌驾
公共CompletableSource应用(字符串s)引发异常{
返回getFlatMapCompletable();
}
})
.订阅(新的CompletableObserver(){
@凌驾
认购的公共无效(一次性d){
System.out.println(“In-onSubscribe”);
}
@凌驾
未完成的公共空间(){
System.out.println(“In-onComplete”);
}
@凌驾
公共无效申报人(可丢弃的e){
System.out.println(“In-onError”);
}
});
线程。睡眠(200L);
}
私有静态Completable getFlatMapCompletable(){
返回Completable.fromAction(新操作(){
@凌驾
public void run()引发异常{
System.out.println(“在flatmapCompletable中”);
}
});
}
}

RxJava中的延迟运算符在另一个线程中执行。因此,执行的其余部分不会等待这一部分完成


请看一些示例

在设置Single.fromCallable之前,是否检查savedInstanceState是否为null?问题可能是主线程出现延迟,基本上看起来loadVideo将从主线程调用,但由于未知原因,它没有被调用