Rxandroid SubscribeOn和ObserveOn有什么区别
我只是在学习Rx-java和Rxandroid2,我只是感到困惑,SubscribeOn和ObserveOn之间的主要区别是什么。
我只是在学习Rx-java和Rxandroid2,我只是感到困惑,SubscribeOn和ObserveOn之间的主要区别是什么。
SubscribeOn 指定可观察对象将在其上运行的计划程序。ObserveOn 指定观察器将在其上观察此 Observable 的计划程序。
因此,基本上 SubscribeOn 主要在后台线程上订阅(执行)(您不想在等待可观察量时阻塞 UI 线程),并且在 ObserveOn 中,您希望在主线程上观察结果...
如果您熟悉AsyncTask,那么SubscriptOn类似于doInBackground方法,ObserveOn类似于onPostExecute...
如果您发现上面的答案充满了行话:
tl;博士
Observable.just("Some string")
.map(str -> str.length())
.observeOn(Schedulers.computation())
.map(length -> 2 * length)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(---)
观察可观察的...在 IO 线程中执行映射函数(因为我们是该线程)...现在切换到计算线程并执行功能...最后确保观察()主线程上的输出。
"subscribingOn"
map(length -> 2 * length)
observeOn()
无论如何,
observeOn()
只需更改下游所有操作员的线程即可。人们通常有这种误解,这种误解也起到了上游的作用,但事实并非如此。observeOn
下面的示例将更好地解释它...
Observable.just("Some string") // UI
.map(str -> str.length()) // UI
.observeOn(Schedulers.computation()) // Changing the thread
.map(length -> 2 * length) // Computation
.subscribe(---) // Computation
subscribeOn()
仅影响当 Observable 将被订阅时将使用的线程,并且它将留在下游。
Observable.just("Some String") // Computation
.map(str -> str.length()) // Computation
.map(length -> 2 * length) // Computation
.subscribeOn(Schedulers.computation()) // -- changing the thread
.subscribe(number -> Log.d("", "Number " + number)); // Computation
位置无关紧要 (
subscribeOn()
)
为什么?因为它只影响订阅的时间。
服从与
subscribeOn
联系的方法
-> 基本示例 :Observable.create
主体内指定的所有工作都将在 中指定的线程上运行。create
subscribeOn
另一个示例:,或Observable.just
Observable.from
Observable.range
注意:所有这些方法都接受值,因此不要使用阻止方法来创建这些值,因为 subscribeOn 不会影响它。
如果要使用阻止功能,请使用
Observable.defer(() -> Obervable.just(blockingMenthod())));
重要事实:
订阅On 不起作用Subjects
倍数:
subscribeOn
如果流中有多个 实例,则只有第一个实例具有实际效果。subscribeOn
订阅和
subscribeOn
人们认为这与 有关,但与它没有任何特别关系。它只影响订阅阶段。subscribeOn
Observable.subscribe
来源 : 托梅克·波兰斯基 (中)