加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

RxJava – 何时使用带有create方法的Observable

发布时间:2020-12-15 04:47:47 所属栏目:Java 来源:网络整理
导读:我正在阅读教程: http://code.tutsplus.com/tutorials/getting-started-with-reactivex-on-android–cms-24387 特别是RxAndroid,但它和RxJava几乎相同.我不确定我完全理解这个概念. 下面我写了一个方法,然后是一个示例用法. 我的问题是:这是实现我的函数的
我正在阅读教程:

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主线程,因为它需要阻止蹦床,并且通常是一个坏主意.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读