To było moje zrozumienie, że rxjava-android wykonuje operacje na osobnym wątku (pod warunkiem, że jest to poprawny Scheduler), co prowadzi do operacji nieblokujących, jednak szybki i brudny test zdaje się potwierdzać, że jest to nieprawidłowe.Android RxJava, bez blokowania?
użyłem następujące fragmenty kodu, a w obu scenariuszach, interfejs użytkownika był blokowany ...
urywek 1
Observable observable = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
int i = 0;
while (i == 0) {}
subscriber.onCompleted();
}
});
observable.subscribeOn(Schedulers.newThread());
observable.observeOn(AndroidSchedulers.mainThread());
observable.subscribe();
Snippet 2
Observable observable = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
SystemClock.sleep(5000);
subscriber.onCompleted();
}
});
observable.subscribeOn(Schedulers.newThread());
observable.observeOn(AndroidSchedulers.mainThread());
observable.subscribe();
Czy coś mi umyka?
Dokładnie, kluczem jest połączenie metod. –
Jaki jest analog "AndroidSchedulers.mainThread()" dla środowiska graficznego? – YNChumak
Masz na myśli Swing? Zobacz https://github.com/ReactiveX/RxSwing/blob/0.x/src/main/java/rx/schedulers/SwingScheduler.java – zsxwing