Rxjava Schedulers 使用

本文详细介绍了在RxJava中如何利用(Schedulers)进行线程切换,重点解析了subscribeOn和observeOn两个关键方法。subscribeOn指定订阅操作发生的线程,而observeOn则用于设定事件回调执行的线程。通过示例代码演示了它们的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Rxjava 中使用Schedulers 对线程进行切换。

其中需要使用到两个方法 observeOn 、 subscribeOn


1:subscribeOn:当我们创建好 观察者和被观察者后,调用 subscribe 订阅事件时,整个事件开始执行.

默认线程为执行订阅的当前线程,而subscribeOn是指定订阅事件所在运行线程。


2:observeOn :设置回调事件运行所在线程,可以在多个回调事件设置不同线程,在回调事件前调用即可。

如果不设置,默认为subscribe所使用的线程


测试Code:

        Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                printThread("OnSubscribe--call");
                subscriber.onNext("");
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(Schedulers.computation())
                .map(new Func1<String, Integer>() {
                    @Override
                    public Integer call(String s) {
                        printThread("map");
                        return 1;
                    }
                })
                .observeOn(Schedulers.newThread())
                .flatMap(new Func1<Integer, Observable<String>>() {
                    @Override
                    public Observable<String> call(Integer integer) {
                        printThread("flatMap");
                        return Observable.just(false).map(new Func1<Boolean, String>() {
                            @Override
                            public String call(Boolean aBoolean) {
                                printThread("map2");
                                return null;
                            }
                        });
                    }
                }).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<String>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(String s) {
                        printThread("onNext");
                    }
                });

输出:

OnSubscribe--call -->:RxIoScheduler-2
map -->:RxComputationScheduler-1
flatMap -->:RxNewThreadScheduler-1
map2 -->:RxNewThreadScheduler-1
onNext -->:main




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值