gpt4 book ai didi

android - 如何在 Android 上使用 RxJava 在多线程上运行订阅者

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:29 25 4
gpt4 key购买 nike

我是 RxJava 的新手,正在努力解决一个(我猜)简单的问题。我想在 3 个线程中同时处理订阅部分。这就是我使用 FixedThreadPool 的原因。示例代码:

Observer.just("one", "two", "three", "four")
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.from(Executors.newFixedThreadPool(3))
.subscribe(new Observer<String>() {

public void onNext(String string) {
Log.d(TAG, "Started: " + string);
SystemClock.sleep(1000);
Log.d(TAG, "Ended: " + string);
}

(...)

}

预期结果:

Started: one
Started: two
Started: three
Ended: one
Started: four
Ended: two
Ended: three
Ended: four

实际结果:

Started: one
Ended: one
Started: two
Ended: two
Started: three
Ended: three
Started: four
Ended: four

我做错了什么?

最佳答案

RxJava Observables 是顺序的,subscribeOnobserveOn 运算符不会并行运行值。

最接近的做法是通过模键对值进行分组,通过 observeOn 运行它们并合并结果:

AtomicInteger count = new AtomicInteger();

Observable.range(1, 100)
.groupBy(v -> count.getAndIncrement() % 3)
.flatMap(g -> g
.observeOn(Schedulers.computation())
.map(v -> Thread.currentThread() + ": " + v))
.toBlocking()
.forEach(System.out::println);

关于android - 如何在 Android 上使用 RxJava 在多线程上运行订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33268120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com