gpt4 book ai didi

java - RxJava - 何时将 Observable 与创建方法一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:37:55 24 4
gpt4 key购买 nike

我正在阅读教程:

http://code.tutsplus.com/tutorials/getting-started-with-reactivex-on-android--cms-24387

特别关注 RxAndroid,但它与 RxJava 几乎相同。我不确定我是否完全理解了这个概念。

下面我写了一个方法,然后是一个示例用法。

我的问题是:这是实现我的功能的正确方法吗,以便我可以在其他线程上异步运行它们?他们实际上只会返回一个创建的 Observable,运行真实的代码,并处理错误和所有这些东西。

或者这是错误的,那我想知道正确的方法。

Observable<String> googleSomething(String text){
return Observable.create(new Observable(){
@Override
public void call(Subscriber<? super String> subscriber) {
try {
String data = fetchData(text); // some normal method
subscriber.onNext(data); // Emit the contents of the URL
subscriber.onCompleted(); // Nothing more to emit
} catch(Exception e) {
subscriber.onError(e); // In case there are network errors
}
}
});
}

googleSomething("hello world").subscribeOn(Schedulers.io()).observeOn(Schedulers.immediate()).subscribe(...)

是否还使用了 Schedulers.immediate() 以便在当前线程上执行订阅者代码?它说“创建并返回一个在当前线程上立即执行工作的调度程序。”在 javadoc 中,但我不确定。

最佳答案

除非您更有经验并且需要自定义运算符或想要桥接基于遗留 addListener/removeListener 的 API,否则您不应该从 create 开始。 StackOverflow 上有几个问题使用了 create 并且是问题的根源。

我更喜欢 fromCallable,它让您生成单个值或抛出异常,因此不需要那些冗长的 defer + just 来源.

Schedulers.immediate() 立即在调用者的线程上执行其任务,在您的示例中是 io() 线程,而不是主线程。目前,不支持将计算移回 Java 主线程,因为它需要阻塞 trampolining,这通常是个坏主意。

关于java - RxJava - 何时将 Observable 与创建方法一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36165189/

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