我在尝试理解什么时候使用
Observable.just(1).subscribe(new Observer<Integer>() {
Disposable disposable;
@Override
public void onSubscribe(Disposable disposable) {
System.out.println("Subscribed");
this.disposable = disposable;
}
@Override
public void onNext(Integer integer) {
System.out.println(integer);
System.out.println(disposable.isDisposed());
}
@Override
public void onError(Throwable throwable) {
System.out.println("Error");
System.out.println(disposable.isDisposed());
}
@Override
public void onComplete() {
System.out.println("Complete");
System.out.println(disposable.isDisposed());
}
})
在 OnComplete
或 OnError
之后,disposable.isDisposed()
返回 true,而当我使用
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> observableEmitter) throws Exception {
if (!observableEmitter.isDisposed())
observableEmitter.onComplete();
}
}).subscribe(new Observer<Integer>() {
Disposable disposable;
@Override
public void onSubscribe(Disposable disposable) {
System.out.println("Subscribed");
this.disposable = disposable;
}
@Override
public void onNext(Integer integer) {
System.out.println(integer);
System.out.println(disposable.isDisposed());
}
@Override
public void onError(Throwable throwable) {
System.out.println("Error");
System.out.println(disposable.isDisposed());
}
@Override
public void onComplete() {
System.out.println("Complete");
System.out.println(disposable.isDisposed());
}
});
我看到 disposable.isDisposed()
返回 false。有人可以向我解释到底发生了什么吗?我知道写得很好的 Observable.create 不能在 onComplete()
或 onError()
之后发出项目。
最佳答案
Disposable
只是持有对 subscription
的引用,为了处置它你需要调用 disposable.dispose()
, Observable
不会在 complete 方法上释放 Disposable
实例。
@Override
public void onComplete() {
System.out.println("Complete");
disposable.dispose();
System.out.println(disposable.isDisposed());
}
关于java - Observable.Create 和 Observer 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456500/