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

IOExceptionthrows 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

回到顶部