RxJava2.x的理解与总结
RxJava是一个基于观察者设计模式将链式编程和异步结合在一起的开源库。
通过查看GitHub开源项目的简介开源知道,RxJava有几个基类。
他们分别适用于不同的场景
io.reactivex.rxjava3.core.Flowable
io.reactivex.rxjava3.core.Observable
io.reactivex.rxjava3.core.Single
io.reactivex.rxjava3.core.Completable
io.reactivex.rxjava3.core.Maybe
上示例代码:
//被观察者
Observable.create(object : ObservableOnSubscribe<String> {
override fun subscribe(emitter: ObservableEmitter<String>) {
emitter.onNext("1")
emitter.onNext("2")
emitter.onNext("3")
emitter.onComplete()
emitter.onComplete()
println("create-Looper:" + (Looper.getMainLooper() == Looper.myLooper()))
}
}).subscribeOn(Schedulers.io())//被观察者执行在什么线程线程
.observeOn(AndroidSchedulers.mainThread())//观察者执行在什么线程线程
//建立订阅关系
.subscribe(object : Observer<String> {
override fun onSubscribe(d: Disposable) {
println("onSubscribe-Looper:" + (Looper.getMainLooper() == Looper.myLooper()))
}
override fun onNext(s: String) {
println("onNext$s")
}
override fun one rror(e: Throwable) {
println("onError")
}
override fun onComplete() {
println("onComplete")
}
})
Observable
Observable中文意思就是被观察者,通过create方法生成对象,里面放的参数ObservableOnSubscribe
然后subscribe有一个传参,他有3个方法,分别是onNext();onError();onComplete();
。
其中onNext();
可以无线调用,Observer都能收到。onComplete();
可以多次调用,但Observer只接受一次;onError();
只能调用一次,第二次将出现异常
Observer
通过new创建一个Observer并实现其中的方法:onNext();onError();onComplete();
。看到这3个方法,就能猜到是做什么的了。
如上面所说,当Observable通过subscribe的传参执行onNext()
等方法时,Observer的这些方法就会被执行。
这个关系就像音乐软件的歌手、音乐人,和关注他们的听众,当音乐人发布新歌时,听众就会收到通知。
Scheduler
RxJava是支持异步的,但要如何做到呢?这就需要讲到Scheduler,中文翻译过来就是调度器。
它是用来控制线程的,如果没有设置Scheduler,RxJava遵循哪个线程产生,就在哪个线程消费的原则,即观察者和消费者是在同一个线程。
如果需要前台调用,后台执行。那么就需要用到Scheduler了,
.observeOn(AndroidSchedulers.mainThread())
表示观察者执行在什么线程
.subscribeOn(Schedulers.io())
表示被观察者执行在什么线程线程
参考文章:https://www.jianshu.com/p/cd3557b1a474
深入参考文章:https://blog.csdn.net/yang_study_first/article/details/111085666
标签:总结,onComplete,onNext,观察者,RxJava2,理解,线程,io,emitter From: https://www.cnblogs.com/VoidCom/p/17077119.html