RxJava – 何时使用带有create方法的Observable
我正在阅读教程:
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,它允许你生成一个值或抛出异常,因此不需要那些冗长的延迟源. Schedulers.immediate()立即在调用者的线程上执行其任务,该线程是示例中的io()线程,而不是主线程.目前,不支持将计算移回Java主线程,因为它需要阻止蹦床,并且通常是一个坏主意. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |