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

这篇具有很好参考价值的文章主要介绍了一起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中的线程切换"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!文章来源地址https://www.toymoban.com/news/detail-405216.html

到了这里,关于一起Talk Android吧(第五百三十八回:RxJava中的线程切换)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第一百一十八回 如何获取蓝牙连接状态

    我们在上一章回中介绍了如何连接蓝牙设备相关的内容,本章回中将介绍如何获取蓝牙连接状态.闲话休提,让我们一起Talk Flutter吧。 我们在上一章回中介绍如何连接蓝牙设备,但是如何知道蓝牙设备是否连接成功呢?这就需要我们去获取蓝牙设备的连接状态,通过蓝牙设备

    2024年02月12日
    浏览(59)
  • 第二十八回:如何给PageView添加指示器

    我们在前面章回中介绍了PageView这个Widget,本章回中将介绍 如何给PageView添加指示器 .闲话休提,让我们一起Talk Flutter吧。 我们在这里说的指示器表示 PageView 底部的小圆圈,它用来指示当前哪个页面被选中。常用的场景是滑动页面时小圆圈高亮显示当前被选中的页面,其它小圆

    2024年02月04日
    浏览(74)
  • 第一百三十回 Flutter与原生平台通信

    我们在上一章回中介绍了Visibility组件相关的内容,本章回中将介绍 Flutter与原生平台通信 相关的内容.闲话休提,让我们一起Talk Flutter吧。 在移动开发领域以Android和IOS SDK开发出的应用程序叫原生开发,开发同一个程序需要两个平台相关的SDK,有没有使用一个SDK来开发运行于

    2024年02月10日
    浏览(42)
  • 第二百三十二回 如何通过相机获取图片文件

    我们在上一章回中介绍了\\\"如何混合选择多个图片和视频文件\\\"相关的内容,本章回中将介绍 如何通过相机获取图片文件 .闲话休提,让我们一起Talk Flutter吧。 我们在前面章回中介绍的选择图片或者视频文件的方式都是通过文件窗口进行的,本章回中将介绍如何通过相机获取图

    2024年02月20日
    浏览(56)
  • 架构设计内容分享(一百三十六):Spring AI 项目简介

    目录 1、概览 2、Spring AI 的主要概念 2.1、高级的 Prompt 和 AiResponse 3、Spring AI 入门 4、Spring AI 实践 4.1、在 Spring Boot 中注入 AiClient 4.2、使用 PromptTemplate 配置查询 5、Error 处理 6、总结 Spring 通过 Spring AI 项目正式启用了 AI(人工智能)生成提示功能。本文将带你了解如何在 Spri

    2024年02月22日
    浏览(49)
  • 一百三十七、Hive——HQL运行报错(持续更新中)

    样例:from_unixtime(unix_timestamp(change_time, \\\'yyyy-MM-dd HH:mm:ss\\\') + green) AS new_timestamp  成功!!! 在DWS层中,对多层SQL使用with语句嵌套查询,然后insert插入数据。如果直接把insert放在with语句上面,那么就会如下报错 org.apache.hadoop.hive.ql.parse.ParseException:line 2:0 cannot recognize input near \\\'w

    2024年02月15日
    浏览(40)
  • PCL点云处理之pcd文件的读写(详细注释版)(一百三十三)

    `处理点云数据的第一步总是把点云从不同格式的文件读取到自己的程序里, 存储点云信息的文件包括但不限于pcd,las,ply,txt等等,由于我们用的是PCL库进行点云处理,所以最适合的还是pcd格式的点云文件,所以有必要学习如何从pcd文件中读取点云的信息:如坐标等,以及如何

    2023年04月18日
    浏览(66)
  • C/C++基础讲解(一百三十一)之经典篇(信息合并/平均分数存储)

    很多时候,特别是刚步入大学的学子们,对于刚刚开展的计算机课程基本上是一团迷雾,想要弄明白其中的奥秘,真的要花费一些功夫,我和大家一样都是这么啃过来的,从不知到知知,懵懂到入门,每一步都走的很艰辛,课程上,大学老师基本上讲解上机实操得时间特别有

    2024年02月07日
    浏览(44)
  • 架构设计内容分享(一百三十三):ES+Redis+MySQL高可用,如何试实现?

    目录 背景: ES 高可用方案: ES 双中心主备集群架构 ES 流量隔离三集群架构 ES 集群深度优化提升 会员 Redis 缓存方案: ES 近一秒延时导致的 Redis 缓存数据不一致问题的解决方案 Redis 双中心多集群架构 高可用会员主库方案: MySQL 双中心 Partition 集群方案 会员主库平滑迁移方

    2024年02月22日
    浏览(50)
  • Linux图形管理框架gdm3、lightdm、sddm、kdm介绍(一百三十七)

    1.Gnome系列图形管理器:gdm、gdm3 Ubuntu默认界面管理器:gdm3 2.KDE系列图形管理器:KDM,SDDM LUbuntu默认界面管理器:sddm 3.Canonical公司系列图形管理器:Lightdm XUbuntu默认界面管理器:lightdm 查看当前使用的显示管理器 

    2024年02月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包