RxJava:线程切换

subscribeOn

  Observable.create(

            // 自定义source
            new ObservableOnSubscribe<String>() {
                @Override
                public void subscribe(ObservableEmitter<String> e) throws Exception {
                    e.onNext("Derry");

                    Log.d(L.TAG, "自定义source: " + Thread.currentThread().getName());
                }
    })

    // ObservbaleCreate.subscribeOn
    // TODO 第二步     new IOScheduler ---> 线程池 传递进去
    .subscribeOn(

            // TODO 第一步  到底干了什么 ( new IOScheduler ---> 线程池)  此处是个策略模式
            Schedulers.io() // 耗时读取的异步

            // Schedulers.newThread() // 开启新线程

    )

     // A线程. subscribe
     //  ObservableSubscribeOn.subscribe
    .subscribe(

            // 终点
            new Observer<String>() {
                @Override
                public void onSubscribe(Disposable d) {

                    Disposable disposable = d;
                    Log.d(L.TAG, "onSubscribe: " +  Thread.currentThread().getName());
                }

                @Override
                public void onNext(String s) {
                    Log.d(L.TAG, "onNext: " + Thread.currentThread().getName());
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
    });

在这里插入图片描述
在这里插入图片描述

observeOn

Observable.create(

        // 自定义source
        new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                e.onNext("Derry");

                Log.d(L.TAG, "自定义source: " + Thread.currentThread().getName());
            }
        })

        // TODO 第二步骤
        .observeOn(

                // TODO 第一步   主线程的 Handlnr
                AndroidSchedulers.mainThread()

        )
        
        // ObservableObserveOn.subscribe
        .subscribe(

                // 终点
                new Observer<String>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(L.TAG, "onSubscribe: " +  Thread.currentThread().getName());
                    }

                    @Override
                    public void onNext(String s) {
                        Log.d(L.TAG, "onNext: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });

在这里插入图片描述
在这里插入图片描述

总结:子线程的切换底层是线程池,主线程的切换由handler实现。结构上是链式调用,U型结构,这也是线程切换的基础~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值