【RxJava 实践系列】(二)创建观察者与被观察者

【RxJava 实践系列】(一)基础知识
【RxJava 实践系列】(二)创建观察者与被观察者
【RxJava 实践系列】(三)线程控制 — Scheduler

一、创建Observer(观察者)

Observer(观察者)

1、创建普通的Observer

前面基础知识已经实现了这种方式、这里还是提一下。

   Observer<String> observer = new Observer<String>() {
        @Override
        public void onCompleted() {
            //执行结果
            Log.v(TAG, "onCompleted ");
        }
        @Override
        public void onError(Throwable e) {
            //执行错误
            Log.v(TAG, "onError: "+e);
        }
        @Override
        public void onNext(String str) {
            //接受数据
            Log.v(TAG, "onNext: "+str);
        }
    };

2、 创建Subscriber

Subscriber是实现了 Observer 的抽象类,对 Observer 接口进行了一些扩展,基本用法与创建Observer 一致。

        Subscriber<String> subscriber = new Subscriber<String>() {

            @Override
            public void onStart() {
                //执行开始(可选)
                Log.v(TAG, "onStart ");
            }
            @Override
            public void onCompleted() {
                //执行结果
                Log.v(TAG, "onCompleted ");
            }
            @Override
            public void onError(Throwable e) {
                //执行错误
                Log.v(TAG, "onError: "+e);
            }
            @Override
            public void onNext(String str) {
                //接受数据
                Log.v(TAG, "onNext: "+str);
            }
        };
Subscriber与Observer主要差别:

1. onStart(): 这是 Subscriber 增加的方法,可以用来进行初始化操作、比如网络请求时显示进度条

2. 解除订阅关系
对于一般Observer想要解除订阅关系需要先获取Subscription;

        Subscription subscription= Observable.create(...)
                                .subscribe(Observer);
        subscription.unsubscribe();

通过Subscription.unsubscribe()来解除订阅。这样做来在一些地方就非常麻烦。对于Subscriber而言可以直接通过Subscriber.unsubscribe();

        Subscriber<String> subscriber = new Subscriber<String>() {...};
        subscriber.unsubscribe();

3、Action1方式创建

在某些情况下,我们不想实现Observer的onCompleted,onError,onNext全部的方法。
比如我们不关心onError方法。这个时候我们门已通过闭包的形式创建观察者。

具体的接口有三种

Observable observable = ...;
        observable.subscribe(Action1 onNext);
        observable.subscribe(Action1 onNext,Action1<Throwable> onError);
        observable.subscribe(Action1 onNext,Action1<Throwable> onError,Action0 onCompleted);
//完整代码
        Observable observable2 = ...;
        observable2.subscribe(new Action1() {
            @Override
            public void call(Object o) {
            //等同于实现onNext方法
            }
        }, new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
            //等同于实现onError方法
            }
        }, new Action0() {
            @Override
            public void call() {
             //等同于实现onCompleted方法           
            }
        });

二、创建Observable(被观察者)

1. Create

通过调用观察者的方法从头创建一个Observable
最基本的、也是最常用的创建方式。【RxJava 实践系列】(一)基础知识有,这里就不贴代码。

2. Defer(延迟)

— 直到有观察者订阅时才创建Observable,并且为每个观察者创建一个新的Observable

        Observable<String> defer = Observable.defer(new Func0<Observable<String>>() {
            @Override
            public Observable<String> call() {
                return Observable.create(new Observable.OnSubscribe<String>() {
                    @Override
                    public void call(Subscriber<? super String> subscriber) {
                        Log.v(TAG, "Observable-call: " + this.toString());
                        subscriber.onNext("test-data");
                        subscriber.onCompleted();
                    }
                });
            }
        });

Defer操作符会一直等待直到有观察者订阅它,然后它使用Observable工厂方法生成一个Observable。它对每个观察者都这样做,因此尽管每个订阅者都以为自己订阅的是同一个Observable,事实上每个订阅者获取的是它们自己的单独的数据序列。

订阅发生时才生成Observable可以确保Observable包含最新的数据。

3.Empty/Never/Throw

- Empty:不发射任何数据但是正常终止的Observable
- Never:创建一个不发射数据也不终止的Observable
- Throw:创建一个不发射数据以一个错误终止的Observable

这三个操作符生成的Observable行为非常特殊和受限。测试的时候很有用,有时候也用于结合其它的Observables,或者作为其它需要Observable的操作符的参数。

4. From

将传入的数组或 Iterable 拆分成具体对象后,依次发送出来。

5. Just

与from类似,将传入的参数依次发送出来。

6. Range

创建发射指定范围的整数序列的Observable

7. Interval(间隔)

创建一个按固定时间间隔发射整数序列的Observable(周期)

8. Timer

创建在一个指定的延迟之后发射单个数据的Observable(一次);
一般用于定时任务;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值