问题描述
我有两种方法:
private void method1() throws InterruptedException {
//SimulateLongOperation
Thread.sleep(5000);
System.out.println("hello1");
}
private void method2(){
System.out.println("hello2");
}
我想在method1完成后调用method2,但是我不想阻塞UI线程。
有可能用RxJava做到吗?
看起来如何?
互联网上没有简单的例子,只有我听不懂的精彩文章。
当我调用时:
method1();
method2();
我阻塞了主线程,这太可怕了。
1楼
您还可以尝试以下操作:
- 使用Kotlin:
Completable.fromAction{ method1() }
.doOnComplete{ method2() }
.subscribeOn(Schedulers.io())
.subscribe()
- 使用Java:
Completable.fromAction(() -> method1() )
.doOnComplete(__ -> method2())
.subscribeOn(Schedulers.io())
.subscribe()
2楼
由于您正在寻找一个非常具体的答案,因此我将在这里发布一个简单的实现。 根据您的用例,可能会有更好的解决方案。
private void method1() throws InterruptedException {
//SimulateLongOperation
Thread.sleep(5000);
System.out.println("hello1");
}
private void method2(){
System.out.println("hello2");
}
void solution() {
Observable<Void> first = Observable.fromCallable(() -> {
method1();
return null;
});
Observable<Void> second = Observable.fromCallable(() -> {
method2();
return null;
});
first.flatMap((Function<Void, ObservableSource<?>>) aVoid -> second)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
}