RxJava 2 Cancelableable和Disposable有什么区别?
我想Observable
使用RxJava 2 创建一个从视图单击侦听器。我从最简单的实现开始(在此方法中,我不使用lambda来显示不同的类型):
Observable<View> viewObservable = Observable.create(new ObservableOnSubscribe<View>() { @Override
public void subscribe(@NonNull ObservableEmitter<View> e) throws Exception {
mNewWordView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View value) {
if (!e.isDisposed()) {
e.onNext(value);
}
}
});
}
});
然后我考虑了onClickListener
如果不需要进一步设置为null 的方法。我发现有两种名称相似(对我而言)的方法:
e.setCancellable(Cancellable c);
和 e.setDisposable(Disposable d);
它们之间有什么区别,我应该使用哪个?
回答:
从Javadoc:
[
Cancellable
是]具有单个可以抛出的cancel方法的功能接口。
该Disposable
不是一个功能界面以及实现它的时候dispose()
方法,你不能抛出checked异常。
与此相反,许多非RxJava组件返回Closeable
或者AutoCloseable
它们通过定义throws
IOException和throws Exception
和是一个负担,有些因为你需要的try-catch它。
例如,setCancellable
在处理文件时要使用:
Observable.create((ObservableEmitter<byte[]> e) -> { FileInputStream fin = new FileInputStream("raw.dat");
e.setCancellable(fin::close);
byte[] buffer = new byte[4096];
for (;;) {
int r = fin.read(buffer);
if (r < 0) {
break;
}
e.onNext(buffer);
}
e.onComplete();
});
你会使用setDisposable
,如果您使用的是Scheduler
:
Observable.create((ObservableEmitter<Event> e) -> { Worker worker = Schedulers.io().createWorker();
e.setDisposable(worker);
eventSource.onEvent(es ->
worker.schedule(() -> e.onNext(es))
);
});
以上是 RxJava 2 Cancelableable和Disposable有什么区别? 的全部内容, 来源链接: utcz.com/qa/404409.html