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

RxJava在多个线程上链接可观察对象

乜烨霖
2023-03-14

我正在开发利用RxJava、realm和改进的应用程序。

我需要创建非常具体的数据处理链。我需要在io调度程序上执行改装调用,然后在我的自定义单线程领域调度程序上处理提供的数据,然后将结果推送到主线程调度程序上的ui。我试图通过使用多个组合来实现这一点,包括观察(observeOn)和订阅(subscribeOn),但我无法让中间部分在调度程序(scheduler)上执行。

我的目标是这样的调度程序:io ---------------

我如何创建这样的可观察链,其中每个可观察的工作都是在特定的线程上完成的?

非常感谢。


共有1个答案

周博达
2023-03-14
匿名用户

查看Observable.observeOn(...)方法。此方法将确保在提供的计划程序上发生之后发生的所有操作。

为了支持您的自定义“领域”调度器,您需要为RxJava提供某种方式来安排工作。如果您使用的是标准的执行器(如Executors.newSingleThreadExecutor()来支持Realm的单线程策略),那么您可以使用调度程序。从(Executor)创建一个计划程序,该计划程序将在特定的执行器上执行。

ExecutorService realm = Executors.newSingleThreadExecutor();
Scheduler realmScheduler = Schedulers.from(realm);
Retrofit source;

source.call()
      .subscribeOn(Schedulers.io())
      .observeOn(realmScheduler)
      .map(DataBaseUpdate)
      .observeOn(AndroidSchedulers.mainThread())
      .subscribe(UIUpdate)

 类似资料:
  • 我使用的是RxJava和RxAndroid,我想将两个可观察到的东西结合起来,但在这两个东西之间,我需要更新UI,所以在到达订阅服务器之前,我必须在主线程中执行代码。 一个解决方案,而不是flatmapping(这是一个被接受的术语吗?)两个可观察到的,将是在更新UI之后在订阅服务器中调用下一个可观察到的,但我觉得应该有一个更优雅的解决方案,比如: 当然,很可能map不是我这里需要使用的运算符。那

  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从

  • 我正在使用RxJava链接异步操作,我想向下游传递一些变量: 这似乎是一种常见的模式,但我找不到有关它的信息。

  • 我正在开发一个简单的REST应用程序,它利用RxJava向远程服务器发送请求(1)。对于REST API的每个传入请求,都会向(1)发送一个请求(使用RxJava和RxNetty)。一切正常,但现在我有了一个新的用例: 为了不让太多的请求轰炸(1),我需要实施速率限制。解决这个问题的一种方法(我假设)是将在向(1)发送请求时创建的每个可观察的(2)添加到另一个执行实际速率限制的(2)中。(2) 然

  • 我看到了很多关于让Rx延迟事件的每次发射的帖子:如何让RxJS可以观测到倒计时?,如何使用RxJava间隔运算符,在可观察项RxJava之间添加延迟,为发出的列表的每个项添加RxJava延迟,以及其他。 不过,我没有看到任何不同延迟的链接。 基本上,我有一个文本视图和一个字母列表,我想: 将文本设置为第一个字母 等待1500ms 将文本设置为null 等待500ms 将文本设置为第二个字母 等待1

  • 在android 6.0.1 Samsung s6 Edge+上的测试 当device screen脱机并从debug中拔出时,可观察到的只是停止发射项目。如果设备打开,则开始发射对象。另一个问题是,在停止接收项目之前,我会按照相同项目的顺序随机地得到2/3个重复调用 ____________________________edit_________________________________