在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;或被叫者和为什么?
答案 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);
}