RxJava源码分析(subscribeOn,observeOn与线程切换)

RxJava简介

RxJava是现在大火的一个异步框架,他代码简洁好懂,功能强大,扩展性高,维护难度小。RxJava最吸引人的功能就是它的线程切换功能。在Android开发中,UI组件只能在主线程中进行,但是主线程中执行太复杂的逻辑又会导致APP卡顿,因此灵活的线程切换是一个安卓开发工程师的必会技能。RxJava提供了优秀的线程切换能力,能在不同的线程执行规定的逻辑代码。

这次就来聊一聊RxJava是怎么实现线程切换。

首先RxJava的一切转换功能都是基于lift这个方法产生代理对象完成,关于这部分我之前有写过一篇博客。
RxJava的源码分析(map,flatmap和类型变换)

大家可以先了解一下lift方法的工作原理,本文就不在赘述了。

示例代码

public class RxJavaTest_1 {
    public static void main(String[] args) throws InterruptedException {
        Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                //打印call方法所在线程
                System.out.println("call : " + Thread.currentThread());
                subscriber.onNext("doOnNext");
                subscriber.onCompleted();
            }
        })
        .subscribeOn(Schedulers.newThread())

        .observeOn(Schedulers.newThread())

        .subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted : " + Thread.currentThread());
            }
            @Override
            public void onError(Throwable throwable) {
                System.out.println("onError : " + Thread.currentThread());
            }
            @Override
            public void onNext(String s) {
                //答应onNext方法所在线程
                System.out.println("onNext : " + Thread.currentThread());
            }
        });

        Thread.sleep(1000);
        //打印主线程
        System.out.println("main : " + Thread.currentThread());
    }
}

RxJava提供subscribeOn和observeOn两个方法去更换线程,subscribeOn可以指定subscribe方法运行的线程,observeOn可以指定Subscriber对象的方法被回调时执行的线程。

下图是上面代码的执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值