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
Post a Comment