RxAndroid блокирует мой интерфейс

Я новичок в RxAndroid и пробовал то же самое с базой данных Room. Но проблема в том, что при вставке данных в базу данных индикатор выполнения, который я показываю, блокируется и работает медленно. Я сослался на этот блог для проекта

public void insertBillPayments(final CallBackParams params,
                               BillPaymentsOffline... payments) {
    Completable.fromAction(() -> db.daoAccess().insertBillPayments(payments))
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(new CompletableObserver() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onComplete() {
                    params.getCallback().onOrderAdded(params);
                }

                @Override
                public void onError(Throwable e) {
                    params.getCallback().onDataNotAvailable(params);
                }
            });
}

Пожалуйста, поправьте меня, если я делаю что-то не так.

Код rx кажется правильным, а предоставленное действие (вставить запись в базу данных) не выполняется в потоке пользовательского интерфейса. Не могли бы вы опубликовать код, связанный с индикатором выполнения?

Lino 15.08.2018 09:51

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

Alex Chengalan 20.08.2018 11:11
0
2
78
1

Ответы 1

Этот код кажется прекрасным, но я бы порекомендовал вам переключить вызовы observeOn и subscribeOn для ясности, поскольку subscribeOn применяется к потоку, а observeOn применяется к передаваемым значениям и функциям, применяемым после него.

http://reactivex.io/documentation/operators/observeon.html

Другие вопросы по теме