java - What is the difference between RxJava 2 Cancellable and Disposable? -


i want create observable view click listener using rxjava 2. started simplest implementation (i don't use lambdas here show different types in method):

 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);                     }                 }             });         }     }); 

then thought way set onclicklistener null if not needed further. found there 2 methods similar (as me) names:

e.setcancellable(cancellable c); , e.setdisposable(disposable d);

what difference between them , should use?

from javadoc:

[cancellable is] functional interface has single cancel method can throw.

the disposable not functional interface plus when implementing dispose() method, not allowed throw checked exceptions.

in contrast, many non-rxjava components return closeable or autocloseable defined via throws ioexception , throws exception , of burden because you'd need try-catch it.

for example, you'd want use setcancellable when work file:

observable.create((observableemitter<byte[]> e) -> {     fileinputstream fin = new fileinputstream("raw.dat");     e.setcancellable(fin::close);      byte[] buffer = new byte[4096];      (;;) {         int r = fin.read(buffer);         if (r < 0) {             break;         }         e.onnext(buffer);     }     e.oncomplete(); }); 

and you'd use setdisposable if use scheduler:

observable.create((observableemitter<event> e) -> {     worker worker = schedulers.io().createworker();     e.setdisposable(worker);      eventsource.onevent(es ->         worker.schedule(() -> e.onnext(es))     ); }); 

Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -