Rxjava学习笔记(一)
来源:互联网 发布:联华文具 淘宝 编辑:程序博客网 时间:2024/06/05 18:40
当Rxjava火了很久之后,才想起来学习一哈,不然就落伍了……^_^
Rxjava是基于观察者模式设计的,(至于什么是观察者模式,有需要了解的自己查,哈哈哈)。
上硬菜,首先这里涉及到两个概念,观察者和被观察者。被观察者发生变化就立马通知观察者,做出相应的事件处理过程。这就是Observable(被观察者)和Observer(观察者)。它们之间通过订阅关系连接。
首先来一个最简单的Observable代码。
Observable<Integer> observable=Observable.create(new ObservableOnSubscribe<Integer>() { @Overridepublic void subscribe(@NonNull ObservableEmitter<Integer> e) throws Exception { //被观察者的动作 e.onNext(1); e.onNext(2); e.onNext(3); e.onComplete(); } });
我这里将泛型定义为Integer类型,ObservableEmitter即为发送消息的载体,就像handler一样。
它有两个常用的方法,onNext()和onComplete(); 第一个方法是填写发送的消息内容,第二个是提示这一阶段发送完成。
接下来看观察者的代码
//创建观察者 Observer<Integer> observer=new Observer<Integer>() { //private Disposable disposable; @Override public void onSubscribe(@NonNull Disposable d) { Log.e(TAG,"-->subscrible"); disposable=d; } @Override public void onNext(@NonNull Integer integer) { Log.e(TAG,"-->"+integer); //disposable.dispose(); //截流 } @Overridepublic void onError(@NonNull Throwable e) { Log.e(TAG,"-->error");}@Overridepublic void onComplete() { Log.e(TAG,"-->finish");}};
刚刚讲过它们通过订阅关系来连接的那就是被观察者订阅观察者,而不是我们平常理解的那样观察者订阅被观察者,我们可以这样连接,被观察者是上游,观察者是下游,当上游发送消息时,下游才可以收到,观察者是被动的,而被观察者是主动的,所以是被观察者订阅观察者,不知道这样说是否能让大家看明白没有。
//被观察者订阅观察者observable.subscribe(observer);
但是,请注意,并不意味着你可以随意乱七八糟发射事件,需要满足一定的规则:
上游可以发送无限个onNext, 下游也可以接收无限个onNext.
当上游发送了一个onComplete后, 上游onComplete之后的事件将会继续发送, 而下游收到onComplete事件之后将不再继续接收事件.
当上游发送了一个onError后, 上游onError之后的事件将继续发送, 而下游收到onError事件之后将不再继续接收事件.
上游可以不发送onComplete或onError.
最为关键的是onComplete和onError必须唯一并且互斥, 即不能发多个onComplete, 也不能发多个onError, 也不能先发一个onComplete, 然后再发一个onError, 反之亦然。
好了,今天就学习到这里,马上下班啦
- RxJava 学习笔记一
- RxJAVA学习笔记(一)
- Rxjava学习笔记(一)
- Rxjava学习笔记(一)
- RxJava 学习笔记(一)
- RxJava学习笔记(一)
- RxJava学习笔记(一)
- RxJava学习笔记(一)--- 基础篇
- RxJava学习笔记(一)概念
- RxJava学习笔记之初识(一)
- RxJava学习一:初识
- RxJava学习(一)
- RxJava学习(一)
- RxJava学习(一)
- RxJava 学习(一)
- RxJava学习(一)
- RXjava学习(一)
- Rxjava学习(一)
- Hadoop高可用模式 集群搭建与管理(一)
- 循环分割list
- mysql慢查日志分析工具:自带的mysqldumpslow
- 文章标题
- Python资源打包脚本
- Rxjava学习笔记(一)
- spring mvc后台redirect直接跳html页面乱码问题
- twitter ID生成算法
- Import Error No module named Crypto.Cipher问题解决方案
- Leetcode 2. Add Two Numbers
- C指针运算的妙用
- 轻量级微服务架构及最佳实践
- xiongmai监控登录视频
- maven项目直接运行在tomcat