一起Talk Android吧(第五百三十八回:RxJava中的线程切换)


各位看官们大家好,上一回中咱们说的例子是"RxJava中的多线程操作",本章回中介绍的例子是"R xJava中的线程切换"。闲话休提,言归正转,让我们一起Talk Android吧!

概念介绍

我们在上一章回中介绍了如何创建多线程,本章回将介绍如何进行线程切换。线程切换是指在主线程和子线程之间进行切换,因为Android只能在主线程中更新UI,所以通过线程切换来更新UI。切换切换也可以通过Andoird的Handler机制实现,我们之前介绍过,这里就不展开讨论了。

使用方法

线程切换也是使用subscribeOn或者observeOn操作符,切换线程时使用不同的参数:

  • 切换到子线程时使用的参数为Schedulers.newThread()
  • 切换到主线程时使用的参数为AndroidSchedulers.mainThread()。

示例代码

Log.d(TAG, "rxJavaEx: "+Thread.currentThread());
Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(@io.reactivex.rxjava3.annotations.NonNull ObservableEmitter<String> emitter) throws Throwable {
                Log.d(TAG, "subscribe: "+Thread.currentThread());
                emitter.onNext("Event 1");
                emitter.onNext("Event 2");
                emitter.onComplete();
            }
        })
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Throwable {
                Log.d(TAG, " Observer accept: "+s+" "+Thread.currentThread());
            }
        });

注意:上面程序中使用的AndroidSchedulers类来自rxjava包,而不是rxandroid包,在文件头import包时需要区分这两种包,否则使用rxAndroid包中的类时程序会报编译错误。我的项目在gradle中导入了rxAndroid依赖,因此会有rxJava和rxAndroid两种类型的包,大家的项目可能不会有这种情况。

上面的代码中我们先是把被观察者切换到了子线程运行,然后把观察者切换到主线程运行。编译并且运行该程序,通过结果来检验是否可以在子线程和主线程之间切换。

: rxJavaEx: Thread[main,5,main]
: subscribe: Thread[RxNewThreadScheduler-1,5,main]
:  Observer accept: Event 1 Thread[main,5,main]
:  Observer accept: Event 2 Thread[main,5,main]

从程序的运行结果中可以看到所有的程序运行在主线程main中,被观察者运行在子线程RxNewThreadScheduler-1中,观察者运行在主线程main中。该结果与我们刚才分析的程序逻辑完全一致,表明上面的程序可以实现线程切换功能。

看官们,关于"RxJava中的线程切换"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值