Android RxJava,非阻塞?

Ale*_* Fu 9 android rx-java

据我所知,rxjava-android在一个单独的线程上执行操作(当提供正确的调度程序时),导致非阻塞操作,但是快速而肮脏的测试似乎证明这是不正确的.

我使用了以下代码片段,在两种情况下,UI都被阻止了......

片段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();
Run Code Online (Sandbox Code Playgroud)

片段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();
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

zsx*_*ing 29

错误是你使用了错误Observable.正确的代码应该是:

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();
Run Code Online (Sandbox Code Playgroud)

双方subscribeOnobserveOn返回一个新的可观察它实现其功能.但原始的Observable没有被修改.实际上,每个操作员总是会创建一个新的Observable而不修改原始的Observable.