在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());
    原文作者:anTttt
    原文地址: https://www.jianshu.com/p/d482e929bbe6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞