Istnieją sprzeczne informacje na temat tego, kiedy i czy należy użyć opcji subscribeOn
z funkcją Retrofit.Używanie subskrybowania z Retrofitem
Here is an answer mówiąc, że nie wolno używać subscribeOn
.
Here is an answer wydaje się sugerować, że subscribeOn
nie ma dobrego domyślnego zestawu.
Here is example code przy użyciu subscribeOn
.
Tak, raz na zawsze, kiedy należy użyć subscribeOn
iz jakiego wątku? Jakie są możliwe konsekwencje używania lub nie używania subscribeOn
?
apiService.issueRequest()
// Is this useful? Required? Bad practice?
.subscribeOn(Schedulers.io())
// Do actions on main thread
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Response>() {
@Override public void call(Response response) {
handleResponse(response);
});
Po połączeniu tych dwóch bibliotek zdecydowałem się je rozdzielić. Retrofit po prostu zawija zwrot w "Observable", więc robię to sam. To pozwala mi mieć zarówno asynchroniczne (dla aplikacji) i zsynchronizować (do testowania) interfejsy API. – quinnjn
Jednym z obszarów, w którym użycie 'subscribeOn' z doposażeniem jest niezwykle pomocne w przechwytywaczu żądań. Na przykład, jeśli potrzebujesz udekorować nagłówek za pomocą tokena uwierzytelniania, często musisz je pobrać w wątku tła. GoogleAuthUtil, na przykład, zostanie zniszczony, jeśli zażądano tokena w głównym wątku. Mam nadzieję, że nie zawsze będzie tak, aby uniknąć dodatkowego opakowania. – lopar