Вызывать метод только тогда, когда другой метод сделан - RxJava - PullRequest
0 голосов
/ 03 марта 2019

У меня есть 2 метода:

private void method1() throws InterruptedException {
        //SimulateLongOperation
        Thread.sleep(5000);
        System.out.println("hello1");
    }

private void method2(){
        System.out.println("hello2");
    }

Я хотел бы вызвать method2, когда метод1 завершен, но я не хочу блокировать поток пользовательского интерфейса.
Возможно ли это сделать с помощью RxJava?
Как это будет выглядеть?В интернете нет простых примеров, есть только отличные статьи, которые я не могу понять.

Когда я призываю:

method1();  
method2(); 

Я блокирую основной поток, это ужасно.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Вы также можете попробовать следующее:

  • С Kotlin:
     Completable.fromAction{ method1() }
            .doOnComplete{ method2() }
            .subscribeOn(Schedulers.io())
            .subscribe()
  • С Java:
     Completable.fromAction(() -> method1() )
            .doOnComplete(__ ->  method2())
            .subscribeOn(Schedulers.io())
            .subscribe()
0 голосов
/ 03 марта 2019

Поскольку вы ищете действительно конкретный ответ, я опубликую здесь наивную реализацию.В зависимости от вашего варианта использования могут быть лучшие решения.

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