在 RxJava 中,切换线程是通过 Scheduler(调度器) 来完成的,常用的操作符是:
subscribeOn():指定 上游(被观察者) 执行线程observeOn():指定 下游(观察者 / 后续操作) 执行线程| Scheduler | 说明 |
|---|---|
Schedulers.io() |
IO 密集型(网络、文件、数据库) |
Schedulers.computation() |
CPU 密集型计算 |
Schedulers.newThread() |
每次新建线程 |
AndroidSchedulers.mainThread() |
Android 主线程(需 RxAndroid) |
Schedulers.single() |
单线程,顺序执行 |
Schedulers.trampoline() |
当前线程立即执行 |
Observable.just("data")
.subscribeOn(Schedulers.io()) // 在 IO 线程执行
.observeOn(AndroidSchedulers.mainThread()) // 切回主线程
.subscribe(data -> {
// 更新 UI
});
Observable.just(1)
.subscribeOn(Schedulers.io()) // 上游 IO
.observeOn(Schedulers.computation()) // 切到计算线程
.map(i -> i + 1)
.observeOn(AndroidSchedulers.mainThread()) // 切回主线程
.subscribe(i -> {
// UI 操作
});
✅
observeOn()可以多次调用,每次影响它之后的操作
subscribeOn()observeOn()api.getUser()
.subscribeOn(S Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(user -> {
// 更新 UI
}, throwable -> {
// 错误处理
});
implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
observeOn 之后才能更新 UI如果你用的是 RxJava2 / RxJava3 或 Kotlin(RxKotlin),我也可以给你对应示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。