Observable
Observable(被观察者)
在

//匿名类方式
Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello");
subscriber.onNext("Hi");
subscriber.onNext("Aloha");
subscriber.onCompleted();
}
});
//lambda方式
Observable observable = Observable.create((subscriber)->{
subscriber.onNext("Hello");
subscriber.onNext("Hi");
subscriber.onNext("Aloha");
subscriber.onCompleted();
});
可以看到,这里传入了一个 OnSubscribe
对象作为参数。OnSubscribe
会被存储在返回的 Observable
对象中,它的作用相当于一个计划表,当 Observable
被订阅的时候,OnSubscribe
的 call()
方法会自动被调用,事件序列就会依照设定依次触发Subscriber
将会被调用三次 onNext()
和一次onCompleted()
背景知识
在很多软件编程任务中,或多或少你都会期望你写的代码能按照编写的顺序,一次一个的顺序执行和完成。但是在
这种方法的优点是,如果你有大量的任务要处理,它们互相之间没有依赖关系。你可以同时开始执行它们,不用等待一个完成再开始下一个(用这种方式,你的整个任务队列能耗费的最长时间,不会超过任务里最耗时的那个
创建Observable
create()
方法是
just
just(T...)
Observable observable = Observable.just("Hello", "Hi", "Aloha");
// 将会依次调用:
// onNext("Hello");
// onNext("Hi");
// onNext("Aloha");
// onCompleted();
from
from(T[])
from(Iterable)
Iterable
拆分成具体对象后,依次发送出来。
String[] words = {"Hello", "Hi", "Aloha"};
Observable observable = Observable.from(words);
// 将会依次调用:
// onNext("Hello");
// onNext("Hi");
// onNext("Aloha");
// onCompleted();
上面 just(T...)
的例子和 from(T[])
的例子,都和之前的 create(OnSubscribe)
的例子是等价的。
interval

Subscribe( 订阅)
在创建好了
observable.subscribe(observer);
// 或者:
observable.subscribe(subscriber);
有人可能会注意到,subscribe()
这个方法有点怪:它看起来是observalbe
订阅了observer
subscriber
而不是observer
subscriber
observalbe
,这看起来就像杂志订阅了读者一样颠倒了对象关系。这让人读起来有点别扭,不过如果把observer.subscribe(observable)
subscriber.subscribe(observable)
,虽然更加符合思维逻辑,但对流式