参考:
RxJava2 中多种取消订阅 dispose 的方法梳理( 源码分析 )
subscribe(Consumer)时返回了 disposable:
Disposable disposable = Observable.just(1, 2, 3)
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println("1==========Consumer accept===========");
}
});
boolean disposed = disposable.isDisposed();
if (disposed) {
disposable.dispose();
}
subscribe(Observer)不返回 disposable, 从 observer 的 onSubscribe 中获取:
private Disposable mDisposable;
Observable.just(1, 2, 3)
.subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
mDisposable = d;
}
@Override
public void onNext(Integer integer) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
if (mDisposable != null && !mDisposable.isDisposed()) {
mDisposable.dispose();
}
CompositeDisposable:当有多个Disposable要处理
Disposable disposable1 = Observable.just(1, 2, 3)
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println("1==========Consumer accept===========");
}
});
Disposable disposable2 = Observable.just(9, 8, 7)
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println("2==========Consumer accept===========");
}
});
CompositeDisposable compositeDisposable = new CompositeDisposable();
compositeDisposable.add(disposable1);
compositeDisposable.add(disposable2);
if (compositeDisposable.isDisposed()) {
compositeDisposable.dispose();
}
DisposableObserver : 可以直接 dispose
DisposableObserver<Integer> disposableObserver = Observable.range(1, 5)
.subscribeWith(new DisposableObserver<Integer>() {
@Override
public void onNext(Integer integer) {
if (integer == 3) {
dispose();
}
System.out.println("integer=============" + integer);
}
@Override
public void onError(Throwable e) {
System.out.println("=======onError======" + e.getMessage());
}
@Override
public void onComplete() {
System.out.println("======onComplete======");
}
});
if (disposableObserver.isDisposed()) {
disposableObserver.dispose();
}