Rxjava学习笔记(一)

当Rxjava火了很久之后,才想起来学习一哈,不然就落伍了……^_^
Rxjava是基于观察者模式设计的,(至于什么是观察者模式,有需要了解的自己查,哈哈哈)。
上硬菜,首先这里涉及到两个概念,观察者和被观察者。被观察者发生变化就立马通知观察者,做出相应的事件处理过程。这就是Observable(被观察者)和Observer(观察者)。它们之间通过订阅关系连接。
首先来一个最简单的Observable代码。

 Observable<Integer> observable=Observable.create(new   ObservableOnSubscribe<Integer>() {
 @Override
public 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();   //截流
 }

 @Override
public void onError(@NonNull Throwable e) {
     Log.e(TAG,"-->error");
}

@Override
public 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, 反之亦然。

好了,今天就学习到这里,马上下班啦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章