在 RxJava 中,切换线程主要通过 Scheduler(调度器) 来实现,常用的操作符是:
subscribeOn():指定 上游(被观察者) 执行所在的线程observeOn():指定 下游(观察者 / 后续操作符) 执行所在的线程| Scheduler | 说明 |
|---|---|
Schedulers.io() |
IO 密集型(网络、数据库、文件) |
Schedulers.computation() |
CPU 密集型计算 |
Schedulers.newThread() |
每次新建线程 |
Schedulers.single() |
单一后台线程 |
AndroidSchedulers.mainThread() |
Android 主线程(RxAndroid) |
Observable.just("request")
.subscribeOn(Schedulers.io()) // 在 IO 线程执行
.map(s -> doNetworkRequest(s)) // 子线程
.observeOn(AndroidSchedulers.mainThread()) // 切回主线程
.subscribe(result -> {
// 更新 UI
});
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(Schedulers.io())
.subscribeOn(Schedulers.newThread()) // 无效
Observable.fromCallable {
// 耗时操作
"result"
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
// UI 更新
}
如果你愿意,可以告诉我:
我可以给你更针对性的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。