2017-06-16 43 views
0

在RxJava/RxAndroid,你经常需要特别执行线程做网络操作时,例如:谁负责执行的线程在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()) 
} 

基本上,其职责是执行线程,呼叫者的或被叫方的,为什么?

+0

这取决于你的约定。您可以评论它将在IO线程上运行的方法,或者直接将其名称更改为'downloadOnIO'。 –

回答

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); 
} 
+0

我同意你的意见,我开始意识到在我的项目中。 –