RxJava2.x的理解与总结
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 onError(e: Throwable) {
println("onError")
}
override fun onComplete() {
println("onComplete")
}
})
Observable
Observable中文意思就是被观察者,通过create方法生成对象,里面放的参数ObservableOnSubscribe,可以理解为一个计划表,泛型T是要操作对象的类型,重写subscribe方法。然后在其中写准备完成的事情(任务),当你执行这些任务的时候,订阅了这个对象的观察者就会收到消息。
然后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
最新文章
- Openvpn 撤销签署的证书(删除用户)
- 第8章 用户模式下的线程同步(4)_条件变量(Condition Variable)
- 基础知识系列☞各版本下IIS请求处理过程区别
- Func系列1:安装配置
- VMware 命令行下的网络配置
- 【HDOJ】2585 Hotel
- STM8S EEPROM 操作
- ubuntu 14.04中Elasticsearch 2.3 中 Nginx 权限认证
- 新人小达之wpf
- 第 10 章 MySQL Server 性能优化
- Delphi编程之爬取贴吧多页帖子图片
- canvas-a13prototype.html
- SpringBoot使用缓存
- 【Codeforces Round 1120】Technocup 2019 Final Round (Div. 1)
- tomat修改启动路径
- PyQt5--MenuBar
- JavaScript学习笔记——错误处理
- Lucene系列四:Lucene提供的分词器、IKAnalyze中文分词器集成、扩展 IKAnalyzer的停用词和新词
- docker存储volume
- SQL自定义排序 ORDER BY