当前位置: 代码迷 >> java >> 仅在其他方法完成后才调用方法-RxJava
  详细解决方案

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

热度:86   发布时间:2023-07-25 19:59:35.0

我有两种方法:

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

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

您还可以尝试以下操作:

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

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

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