温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

rxjava如何切换线程

发布时间:2026-10-11 06:53:32 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

在 RxJava 中,切换线程主要通过 Scheduler(调度器) 来实现,常用的操作符是:

  • subscribeOn():指定 上游(被观察者) 执行所在的线程
  • observeOn():指定 下游(观察者 / 后续操作符) 执行所在的线程

一、常见的 Scheduler(线程类型)

Scheduler 说明
Schedulers.io() IO 密集型(网络、数据库、文件)
Schedulers.computation() CPU 密集型计算
Schedulers.newThread() 每次新建线程
Schedulers.single() 单一后台线程
AndroidSchedulers.mainThread() Android 主线程(RxAndroid)

二、基本用法示例

1️⃣ 子线程执行任务,主线程更新 UI(Android 最常见)

Observable.just("request")
        .subscribeOn(Schedulers.io())          // 在 IO 线程执行
        .map(s -> doNetworkRequest(s))         // 子线程
        .observeOn(AndroidSchedulers.mainThread()) // 切回主线程
        .subscribe(result -> {
            // 更新 UI
        });

2️⃣ 多次切换线程

Observable.just(1)
        .subscribeOn(Schedulers.io())
        .map(i -> i + 1)                 // IO 线程
        .observeOn(Schedulers.computation())
        .map(i -> i * 2)                 // 计算线程
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(i -> {
            // 主线程
        });

注意:observeOn() 影响的是它之后的操作


三、subscribeOn 和 observeOn 的区别

✅ subscribeOn

  • 只生效 第一次
  • 决定 数据源从哪里开始发射
.subscribeOn(Schedulers.io())
.subscribeOn(Schedulers.newThread()) // 无效

✅ observeOn

  • 可多次使用
  • 每次切换都会改变后续线程

四、Kotlin + RxJava 示例

Observable.fromCallable {
    // 耗时操作
    "result"
}
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe {
        // UI 更新
    }

五、常见坑

  1. 忘记切回主线程 → Android 崩溃
  2. 多次 subscribeOn 无效
  3. 在主线程做 IO 操作
  4. 没有 dispose / 取消订阅(内存泄漏)

如果你愿意,可以告诉我:

  • 你用的是 RxJava2 还是 RxJava3
  • 是 Android 还是后端
  • 具体场景(网络 / 数据库 / 并发)

我可以给你更针对性的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手