我正在阅读教程:
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/