Skip to content

RxJava 2 onDispose not called for Observable.share() #5878

Closed
@gkamperis

Description

@gkamperis

Hi,

using RxJava 2.1.10.

according to the documentation for .share() I expect the onDispose to be called on the shared observable once all subscribers dispose.

Is my expectation wrong?

Thanks in advance.

http://reactivex.io/documentation/operators/refcount.html

Sample:

io.reactivex.Observable<Long> unshared = io.reactivex.Observable.interval(0, 100, TimeUnit.MILLISECONDS);
unshared.doOnDispose(() -> Log.d("RX TEST", "DISPOSED UNSHARED!"));
unshared.doFinally(() -> Log.d("RX TEST", "FINALLY UNSHARED!"));
unshared.doOnComplete(() -> Log.d("RX TEST", "COMPLETE UNSHARED!"));

io.reactivex.Observable<Long> shared = unshared.share();
shared.doOnDispose(() -> Log.d("RX TEST", "DISPOSED SHARED!"));
shared.doFinally(() -> Log.d("RX TEST", "FINALLY SHARED!"));
shared.doOnComplete(() -> Log.d("RX TEST", "COMPLETE SHARED!"));

Disposable sub1 = shared
		.doOnDispose(() -> Log.d("RX TEST", "doOnDispose Subscription 1"))
		.subscribe(i -> Log.d("RX TEST", "Shared Subscription #1: " + i));
Disposable sub2 = shared
		.doOnDispose(() -> Log.d("RX TEST", "doOnDispose Subscription 2"))
		.subscribe(i -> Log.d("RX TEST", "Shared Subscription #2: " + i));

_handler.postDelayed(new Runnable() {
	@Override
	public void run() {
		sub1.dispose();
		Log.d("RX TEST", "disposing Subscription 1");
		sub2.dispose();
		Log.d("RX TEST", "disposing Subscription 2");
	}
}, 500);

Log:
RX TEST: Shared Subscription #1: 0
RX TEST: Shared Subscription #2: 0
RX TEST: Shared Subscription #1: 1
RX TEST: Shared Subscription #2: 1
RX TEST: Shared Subscription #1: 2
RX TEST: Shared Subscription #2: 2
RX TEST: Shared Subscription #1: 3
RX TEST: Shared Subscription #2: 3
RX TEST: Shared Subscription #1: 4
RX TEST: Shared Subscription #2: 4
RX TEST: Shared Subscription #1: 5
RX TEST: Shared Subscription #2: 5
RX TEST: doOnDispose Subscription 1
RX TEST: disposing Subscription 1
RX TEST: doOnDispose Subscription 2
RX TEST: disposing Subscription 2

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions