val observable = Observable.create<String> { emitter ->
emitter.onNext("111")
emitter.onNext("2222")
emitter.onComplete()
}
var observerA = object :Observer<String>{
override fun onSubscribe(d: Disposable) {
println("A-订阅了")
}
override fun onNext(t: String) {
println("A-收到了:${t}")
}
override fun onError(e: Throwable) {
println("A-错误")
}
override fun onComplete() {
println("A-关闭了")
}
}
var observerB = object :Observer<String>{
override fun onSubscribe(d: Disposable) {
println("B-订阅了")
}
override fun onNext(t: String) {
println("B-收到了:${t}")
}
override fun onError(e: Throwable) {
println("B-错误")
}
override fun onComplete() {
println("B-关闭了")
}
}
observable.subscribe(observerA)
observable.subscribe(observerB)
subscribeOn(Schedulers.io())
-
作用:指定 Observable 发射数据项和执行操作所在的线程
-
位置:通常放在链式调用的前面
-
特点:
- 整个 Observable 的操作(包括创建、发射数据等)会在指定的线程上执行
- 如果多次调用
subscribeOn(),只有第一个会生效
-
Schedulers.io() :
- 专门用于 I/O 密集型操作的线程池
- 适合网络请求、文件读写等操作
- 线程池会根据需要动态增长
observeOn(AndroidSchedulers.mainThread())
-
作用:指定 Observer 接收和处理数据所在的线程
-
位置:通常放在链式调用的后面,在订阅之前
-
特点:
- 可以多次调用,每次调用会影响后续操作的线程
- 通常用于将结果切换到主线程更新 UI
-
AndroidSchedulers.mainThread() :
- RxAndroid 提供的调度器
- 确保操作在主线程(UI 线程)执行