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 …

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?

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.

  • ¿Cómo obtener el último valor de BehaviorSubject?
  • Cómo utilizar Realm asObservable con el operador concat () de RxJava?
  • Schedulers.immediate () no funciona con las pruebas de gradle de la línea de comandos
  • rxjava interval () tiempo de reinicio después de algún evento
  • Android Rxjava suscribirse a un cambio de variable
  • ¿Cómo reconstruir o restablecer caché Observable, utilizado con Retrofit para obtener nuevos datos?
  • RxAndroidBle mantener una conexión persistente + Manejo de escritura / notificación
  • ¿Cómo ignorar el error y continuar la corriente infinita?
  • Observable.empty () hace que java.util.NoSuchElementException: Secuencia no contiene elementos
  • RxJava comparte las emisiones de un Observable entre múltiples suscriptores
  • RxAndroid, bus de eventos y ciclo de vida de la actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.