Android 如何使用RxJava延迟加载项目?
在膨胀Android视图时,我从后台线程加载了一堆东西,并根据网络响应膨胀了一些视图。所以我尝试使用RxJava来推迟一些任务,比如Android 如何使用RxJava延迟加载项目?,android,rx-java2,Android,Rx Java2,在膨胀Android视图时,我从后台线程加载了一堆东西,并根据网络响应膨胀了一些视图。所以我尝试使用RxJava来推迟一些任务,比如 Single.fromCallable(() -> savedInstanceState) .delay(50,TimeUnit.MICROSECONDS,AndroidSchedulers.mainThread()) .flatMapCompletable(this::loadVideos)
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将从主线程调用,但由于未知原因,它没有被调用