上篇文章我们分析的是from参数只有一个,假设有多个,这里我们假设2个
Observable<String> myObservable =Observable.just("Hello, world!","ddd");
我们看下有什么不一样
public static <T> Observable<T> just(T t1, T t2) {
return from((T[])new Object[] { t1, t2 });
}
public static <T> Observable<T> from(T[] array) {
int n = array.length;
if (n == 0) {
return empty();
} else
if (n == 1) {
return just(array[0]);
}
return create(new OnSubscribeFromArray<T>(array));
}
这里创建了一个OnSubscribeFromArray
public OnSubscribeFromArray(T[] array) {
this.array = array;
}
最终观察者订阅的时候同样
@Override
public void call(Subscriber<? super T> child) {
child.setProducer(new FromArrayProducer<T>(child, array));
}
这里的Producer变成了FromArrayProducer
最终也一样调用它的request
public void request(long n) {
if (n < 0) {
throw new IllegalArgumentException("n >= 0 required but it was " + n);
}
if (n == Long.MAX_VALUE) {
if (BackpressureUtils.getAndAddRequest(this, n) == 0) {
fastPath();
}
} else
if (n != 0) {
if (BackpressureUtils.getAndAddRequest(this, n) == 0) {
slowPath(n);
}
}
}
这里关于不是特别理解,最终调用fastPath
void fastPath() {
final Subscriber<? super T> child = this.child;
for (T t : array) {
if (child.isUnsubscribed()) {
return;
}
child.onNext(t);
}
if (child.isUnsubscribed()) {
return;
}
child.onCompleted();
}
这里依次获取array里面的值调用onNext,最后调用onCompleted