我创建了一个connectedObservable,如下所示:
final List<Integer> list = new ArrayList<Integer>();
for(int j=1;j<=3;j++)
list.add(j);
Observable<Integer> observable = Observable.fromIterable(list);
这个可观察到的发射1、2、3
现在我以这种方式将其转换为connectableObservable:
observable.publish().autoConnect(2);
因此,我期望自从2传递给autoConnect以来,直到找到2个订阅者,它才会触发。但相反,它仅在找到的1个订阅者上执行。
让我告诉你我尝试过的事情:
observable.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
Log.v("consumer1:", ""+integer);
}
});
我希望它不会在日志中打印任何内容。但是我得到以下信息:
consumer1:: 1
consumer1:: 2
consumer1:: 3
根据to the documentation在autoConnect(int numberOfSubscribers):
* @param numberOfSubscribers the number of subscribers to **await** before calling connect * on the ConnectableObservable. A non-positive value indicates * an immediate connection.
答案 0 :(得分:0)
在RxJava中,您不应忽略运算符的返回值:
Observable<Integer> shared = observable.publish().autoConnect(2);
shared.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
Log.v("consumer1:", ""+integer);
}
});
shared.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
Log.v("consumer2:", ""+integer);
}
});
推荐阅读:https://github.com/ReactiveX/RxJava#simple-background-computation