9

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();

スニペット 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();

ここで何か不足していますか?

4

1 に答える 1