【问题标题】:Android RxJava, Non Blocking?Android RxJava,非阻塞?
【发布时间】:2014-05-04 11:52:20
【问题描述】:

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

我使用了以下代码 sn-ps,在这两种情况下,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();

我错过了什么吗?

【问题讨论】:

    标签: android rx-java


    【解决方案1】:

    错误是你使用了错误的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();
    

    subscribeOnobserveOn 都返回一个新的 Observable,它实现了它们的功能。但是原始的 Observable 没有被修改。实际上,每个算子都会创建一个新的 Observable 而不会修改原来的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2018-03-18
    相关资源
    最近更新 更多