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

作者: anTttt | 来源:发表于2016-04-07 13:35 被阅读1125次
    错误代码
    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());
    

    相关文章

      网友评论

        本文标题:在rxJava中使用just操作符时遇到的坑

        本文链接:https://www.haomeiwen.com/subject/jqgmlttx.html