gpt4 book ai didi

java - RxJava 2 在新线程中创建列表

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:03 24 4
gpt4 key购买 nike

开发者!我正在尝试在实际项目中使用 RxJava,但似乎我没有理解正确的逻辑。我需要在新线程中创建一个对象列表。完成后将此列表发送给观察员。我发现的是:

LinkedList<IntroSliderElement> list = new LinkedList<>();
list.add(new IntroSliderElement(0, "test 0", 0));
list.add(new IntroSliderElement(1, "test 1", 1));
list.add(new IntroSliderElement(2, "test 2", 2));

Observable<LinkedList<IntroSliderElement>> listObserv = Observable.just(list);
listObserv
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<IntroSliderElement>>() {
@Override
public void onSubscribe(Disposable d) {

}

@Override
public void onNext(List<IntroSliderElement> value) {
view().render(new IntroModel.OnFirstSliderElement((LinkedList<IntroSliderElement>) value));
}

@Override
public void onError(Throwable e) {

}

@Override
public void onComplete() {

}
});

但是很容易看出,list是在主线程中创建和执行的,那么如何使用rxJava在一个全新的线程中创建呢?

最佳答案

你想要的大概是Observable.fromCallable() .

Observable.fromCallable(() -> {
// init your list here
yourList = ....
Observable.fromIterable(yourList);
});

内部代码将在订阅发生时执行。因此,您可以在您喜欢的线程上执行订阅。

Observable.create() 将立即执行,无论订阅是否发生,这就是为什么建议谨慎使用它。

正如 Artem Zinnatullin 的帖子所述:

Don't use Observable.create() if you can, it's very easy to shoot yourself in the foot! (and then shoot again for each new subscriber!)

关于java - RxJava 2 在新线程中创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42050852/

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