谁负责在RxJava / RxAndroid,来电者或被叫者

时间:2017-06-16 17:25:13

标签: rx-java rx-android

在RxJava / RxAndroid中,您经常需要强制执行线程,尤其是在执行网络操作时,例如:

Single.fromCallable(/*download*/)
      .subscribeOn(Schedulers.io())
      .observeOn(AndroidSchedulers.mainThread())

支持单个是在静态方法或方法中,下面的一个更有意义:

public static Single<File> download(URL url) {
      return Single.fromCallable(/*download*/);
}

public static Single<File> download(URL url) {
     return Single.fromCallable(/*download*/)
      .subscribeOn(Schedulers.io())
      .observeOn(AndroidSchedulers.mainThread())
}

基本上,他们的责任是强制执行线程,呼叫者&#39;或被叫者和为什么?

1 个答案:

答案 0 :(得分:1)

仅使用源处理订阅部分更有意义。如果线程根本不重要,您也可以跳过它。否则,您完全知道线程在此处的要求。

public static Single<File> download(URL url) {
     return Single.fromCallable(/*download*/)
      .subscribeOn(Schedulers.io());
}

当您使用事件并且对此处的线程有特定要求时,应使用observeOn()运算符。

download(url).observeOn(AndroidSchedulers.mainThread()).subscribe();

此外,您可以使用该方法定义它或使用其他命名约定,例如downloadOnIo

public static Single<File> download(URL url, Scheduler subscribeOn) {
     return Single.fromCallable(/*download*/)
      .subscribeOn(subscribeOn);
}