Android RxJava, sin bloqueo?
Era mi entendimiento que rxjava-android realiza operaciones en un hilo separado (cuando se proporciona el programador correcto), dando lugar a operaciones no bloqueantes, sin embargo, una prueba rápida y sucia parece probar que esto es incorrecto.
Utilicé los siguientes fragmentos de código y en ambos casos, la interfaz de usuario se bloqueaba …
- ¿Cómo actualizar observable en RxJava?
- RxJava Async tarea en Android
- ¿Existe algún patrón de desarrollo que pueda reemplazar un IntentService para las solicitudes de red?
- Solicitudes HTTP periódicas con RxJava y Retrofit
- Cancelar la suscripción de un rx.Single en RxJava
Snippet 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();
¿Me estoy perdiendo de algo?
- Comportamiento de onNext y onComplete
- Cancelación de varias suscripciones a la vez en RxAndroid - Android
- RxJava Observable a Completable, cómo evitar toBlocking ()
- RxJava + retrofit, obtenga una lista y agregue información adicional para cada artículo
- Cómo encadenar los métodos groupBy () de RxJava como groupBy (). GroupBy ()
- ¿Por qué Retrofit se utiliza con RxJava
- RxJava / RxAndroid - maneja varios cambios de EditText
- RxJava como un bus de eventos, onNext se llama varias veces cuando sólo un mensaje de evento
El error es que usas el Observable
incorrecto. El código correcto debe ser:
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()).observeOn(AndroidSchedulers.mainThread()).subscribe();
Tanto subscribeOn
y observeOn
devolver un nuevo Observable que implementa sus funciones. Pero el Observable original no se modifica. En realidad, cada operador siempre creará un nuevo Observable sin modificar el original.
- TextInputLayout no se muestra cuando se agrega programativamente
- ¿Cómo guardo datos de la cámara en disco usando MediaStore en Android?