当前位置: 首页 > 知识库问答 >
问题:

Rxjava-为什么subscribeOn在OnSubscribe中设置它的计划

邹星火
2023-03-14

Rxjava可以使用observeOn方法和subscribeOn方法更改observable和subscriber的线程调度。observeOn和subscribeOn使用lift方法返回一个新的observable。
lift方法将创建一个新的observable,我认为它像一个克隆方法,它将创建一个新的订阅者和一个新的OnSubscribe。

在observeOn()中:新的OnSubscribe将通知旧的OnSubscribe向新的订户发送消息,新的订户在获得消息时将更改它的线程调度程序,之后,新的订户将向旧的订户发送消息。

在subscribeOn()中:新的OnSubscribe将首先更改其线程调度程序,然后通知旧的OnSubscribe......................................

我的问题是为什么subscribeOn()首先在新的OnSubscribe中更改它的线程调度器,而observeOn()在新的订阅服务器从旧的OnSubscribe获取消息时更改它的线程调度器?创作者为什么这样设计?为什么在subscribeOn和observeOn中更改线程调度器的位置不同?
提前致谢

共有1个答案

巫马玉堂
2023-03-14

subscribeon允许通过将订阅移动到另一个线程(生命周期:subscribi-time)来处理订阅的副作用。observeon允许通过将发出的值移动到另一个线程(生命周期:运行时)来处理发出的每个值的观察副作用。这两者在生命周期中的不同点起作用,但有时最终结果是相同的。调用方向是相反的:subscribeon上行,observeon下行。

 类似资料:
  • 我试图在不同的IO线程中运行块和块。但是输出是这样的: 如您所见,调用似乎对流没有影响,引用调用方法的线程。 另外,请考虑下面的代码: 这些代码的问题是什么?谢了。

  • getUserWalable方法发出一些用户,我需要知道为什么他把. subbeOn(Schedulers.io()),而他已经在main funcion上调用它,我提供了这两种方法的截取,我知道,subbeOn将使进程发生在后台线程上,但当他调用它两次时,这会有什么不同,我不知道,因为我理解只是在getUsersWalable中调用一次就足够了

  • 我有以下代码: 第三方DK。doSomeAction回调在主线程上发布,因此发射器也将在主线程上发出,而不是在订阅线程上发出(如果我在flatMap中进一步进行一些网络交互,链将失败)。 如果我在第一个之后添加,它会切换到正确的线程,但是有没有办法在正确的线程上发出?我不能修改行为。

  • 问题内容: 因此,该资源(http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html)建议在该线程不处理中断本身时将其设置为“ 这样,调用堆栈中更高级别的代码就可以了解中断并在需要时对其进行响应 。” 假设我正在使用ExecutorService在其他线程中运行某些内容。我构造一个Callable并将此Callable传

  • 我用“Hello World bare Bones”开始了一个代号为One的项目。我以前在设计器的主题选项卡中定义样式,但现在变得乏味了。 实际上,对于某些选择器,即使重写(取消选中框)某些属性,设计器(见下文)或应用程序本身也不会更改样式。 然而,在选择器列表中,颜色不是我选择的颜色,但对齐方式似乎是它。 任何帮助都很感激,

  • 在rxjava中有一些调度器,就像io()、newThread()……,有一个调度器名为“trampoline”,这个调度器用于:创建并返回一个调度器,该调度器将当前线程上的工作排队,以便在当前工作完成后执行。 我不明白为什么这个调度程序命名为“trampoline”,而不是“queue”(或其他名称,如“queue”)。 你也有同样的谜题吗?