仅在其他方法完成后才调用方法-RxJava

时间:2019-03-03 11:14:47

标签: java android rx-java rx-java2 rx-android

我有2种方法:

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(); 

我阻塞了主线程,这太可怕了。

2 个答案:

答案 0 :(得分:2)

您还可以尝试以下操作:

  • 与Kotlin:
     Completable.fromAction{ method1() }
            .doOnComplete{ method2() }
            .subscribeOn(Schedulers.io())
            .subscribe()
  • 使用Java:
     Completable.fromAction(() -> method1() )
            .doOnComplete(__ ->  method2())
            .subscribeOn(Schedulers.io())
            .subscribe()

答案 1 :(得分:1)

由于您正在寻找一个非常具体的答案,因此我将在这里发布一个简单的实现。根据您的用例,可能会有更好的解决方案。

    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();
    }