首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在RxAndroid中更改调度程序?

如何在RxAndroid中更改调度程序?
EN

Stack Overflow用户
提问于 2016-01-26 08:40:27
回答 1查看 113关注 0票数 0

我想在我的项目中使用RxAndroid,我让线程休眠50 my,但是它导致了代码

代码语言:javascript
复制
    public void getTypeAndCommodity() {
    Observable.from(getCommodities())
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<Commodity>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(Commodity commodity) {
                }
            });
}

getCommodities:

代码语言:javascript
复制
    private ArrayList<Commodity> getCommodities() {
    // some test info
    ArrayList<Commodity> list = new ArrayList<>();
    for (int i = 0; i < 99; i++) {
        Commodity commodity = new Commodity();
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        commodity.setName("name" + i);
        commodity.setType("type" + (i + 1) / 10);
        list.add(commodity);
    }
    return list;
}

为什么会这样?请帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-28 11:30:02

这是因为getCommodities()是在主线程中执行的,并且只有在io线程中使用subscribeOn(Schedulers.io())执行发射的项。如果您也希望在后台线程中执行getCommidities(),则需要创建一个可观察到的使用create ()方法:

代码语言:javascript
复制
Observable.defer(new Func0<Observable<Object>>() {
        @Override public Observable<Object> call() {
            return Observable.from(getCommodities());
        }
    }).subscribeOn(Schedulers.io())...

如果您需要更多信息:http://blog.danlew.net/2015/07/23/deferring-observable-code-until-subscription-in-rxjava/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35009781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档