Gre*_*ack 3 java multithreading reactive-programming rx-java
我正在阅读教程:
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(...)
Run Code Online (Sandbox Code Playgroud)
还使用Schedulers.immediate()来执行当前线程上的订户代码?它说"创建并返回一个在当前线程上立即执行工作的调度程序." 在javadoc,但我不确定.
除非您更有经验并且需要自定义运算符或想要桥接基于旧版addListener/removeListener的API,否则您不应该开始使用create.StackOverflow上有几个问题使用create并且是麻烦的来源.
我更喜欢fromCallable哪个让你生成一个值或抛出异常,因此不需要那些冗长的defer+ just源.
Schedulers.immediate()在调用者的线程上立即执行其任务,该线程是示例中的io()线程,而不是主线程.目前,不支持将计算移回Java主线程,因为它需要阻止蹦床,并且通常是一个坏主意.
| 归档时间: |
|
| 查看次数: |
3925 次 |
| 最近记录: |