在rxJava中使用just操作符时遇到的坑

错误代码
Observable
         .just(initValues()) 
         .subscribeOn(Schedulers.io())   
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe(values -> doSomething());

我的需求是调用initValues()方法从数据库加载一些数据,在io线程执行,然后在mainThread订阅结果,但是这样写并不能实现我的需求。

原因

因为just()from()这类能够创建Observable的操作符在创建之初,就已经存储了对象的值,而不是在被订阅的时候才创建。所以在我们订阅之前,initValues()方法就已经在开始执行了,这样就不能达到我们想要的效果。

解决方法

用create()操作符。

Observable
       .create(subscriber ->
                XXObject values = initValues();
                subscriber.onNext(values);
        )
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(values -> doSomething());
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容