您的位置:首页 > 移动开发 > Android开发

RxJava(RxAndroid)Subject学习

2016-09-22 17:52 393 查看
本文主要内容出自:

http://reactivex.io/documentation/subject.html

Subject是一种bridge和proxy,它既是Observable又是Observer。从Subject类定义就可以看出这一点,如下:

public abstract class Subject<T, R> extends Observable<R> implements Observer<T>{...}


Subject分类:

AsyncSubject

BehaviorSubject

PublishSubject

ReplaySubject

AsyncSubject:只会响应subject.subscribe(observer)之后最近发送的事件,即只会接收一个事件;如果发生错误,则只接受错误事件。

BehaviorSubject:只会响应subject.subscribe(observer)调用时之前最近的一个事件和之后Observable发送的所有事件;如果发生错误,则只接受错误事件。

例子:

// 接收所有事件.
BehaviorSubject<Object> subject = BehaviorSubject.create("default");

subject.subscribe(observer);
subject.onNext("one");
subject.onNext("two");
subject.onNext("three");

// 只接收事件 "one", "two" and "three" events, 而没有事件 "zero"
BehaviorSubject<Object> subject = BehaviorSubject.create("default");
subject.onNext("zero");
subject.onNext("one");

subject.subscribe(observer);
subject.onNext("two");
subject.onNext("three");

// 只接收onCompleted事件
BehaviorSubject<Object> subject = BehaviorSubject.create("default");
subject.onNext("zero");
subject.onNext("one");
subject.onCompleted();
subject.subscribe(observer);

// 只接收 onError事件
BehaviorSubject<Object> subject = BehaviorSubject.create("default");
subject.onNext("zero");
subject.onNext("one");
subject.onError(new RuntimeException("error"));
subject.subscribe(observer);


PublishSubject:响应subject.subscribe(observer)调用之后的所有事件;如果发生错误,则只接受错误事件。

ReplaySubject:则会接收Observable发出的所有事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: