观察者

100 阅读1分钟
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)

微信截图_20250507164334.png

subscribeOn(Schedulers.io())

  • 作用:指定 Observable 发射数据项执行操作所在的线程

  • 位置:通常放在链式调用的前面

  • 特点

    • 整个 Observable 的操作(包括创建、发射数据等)会在指定的线程上执行
    • 如果多次调用 subscribeOn(),只有第一个会生效
  • Schedulers.io()

    • 专门用于 I/O 密集型操作的线程池
    • 适合网络请求、文件读写等操作
    • 线程池会根据需要动态增长

observeOn(AndroidSchedulers.mainThread())

  • 作用:指定 Observer 接收和处理数据所在的线程

  • 位置:通常放在链式调用的后面,在订阅之前

  • 特点

    • 可以多次调用,每次调用会影响后续操作的线程
    • 通常用于将结果切换到主线程更新 UI
  • AndroidSchedulers.mainThread()

    • RxAndroid 提供的调度器
    • 确保操作在主线程(UI 线程)执行