Top Description Fields Constructors Methods
io.reactivex.rxjava3.subscribers

public abstract Class DisposableSubscriber<T>

extends Object
implements FlowableSubscriber<T>, Disposable
Class Inheritance
All Implemented Interfaces
io.reactivex.rxjava3.disposables.Disposable, io.reactivex.rxjava3.core.FlowableSubscriber, org.reactivestreams.Subscriber
Known Direct Subclasses
io.reactivex.rxjava3.internal.operators.flowable.BlockingFlowableLatest.LatestSubscriberIterator, io.reactivex.rxjava3.internal.operators.flowable.BlockingFlowableNext.NextSubscriber, io.reactivex.rxjava3.internal.operators.flowable.FlowableBufferExactBoundary.BufferBoundarySubscriber, io.reactivex.rxjava3.internal.operators.flowable.FlowableWindowBoundary.WindowBoundaryInnerSubscriber, io.reactivex.rxjava3.internal.operators.flowable.FlowableDebounce.DebounceSubscriber.DebounceInnerSubscriber
Type Parameters
<T>
the received value type.
Imports
java.util.concurrent.atomic.AtomicReference, org.reactivestreams.Subscription, io.reactivex.rxjava3.core.FlowableSubscriber, io.reactivex.rxjava3.disposables.Disposable, io.reactivex.rxjava3.internal.subscriptions.SubscriptionHelper, io.reactivex.rxjava3.internal.util.EndConsumerHelper

An abstract Subscriber that allows asynchronous, external cancellation by implementing Disposable.

All pre-implemented final methods are thread-safe.

The default onStart() requests Long#MAX_VALUE by default. Override the method to request a custom positive amount. Use the protected request(long) to request more items and cancel() to cancel the sequence from within an onNext implementation.

Note that calling request(long) from onStart() may trigger an immediate, asynchronous emission of data to onNext(Object). Make sure all initialization happens before the call to request() in onStart(). Calling request(long) inside onNext(Object) can happen at any time because by design, onNext calls from upstream are non-reentrant and non-overlapping.

Like all other consumers, DisposableSubscriber can be subscribed only once. Any subsequent attempt to subscribe it to a new source will yield an IllegalStateException with message "It is not allowed to subscribe with a(n) <class name> multiple times.".

Implementation of onStart(), onNext(Object), onError(Throwable) and onComplete() are not allowed to throw any unchecked exceptions. If for some reason this can't be avoided, use io.reactivex.rxjava3.core.Flowable#safeSubscribe(org.reactivestreams.Subscriber) instead of the standard subscribe() method.

Example


Disposable d =
    Flowable.range(1, 5)
    .subscribeWith(new DisposableSubscriber<Integer>() {
        @Override public void onStart() {
            request(1);
        }
        @Override public void onNext(Integer t) {
            if (t == 3) {
                cancel();
            }
            System.out.println(t);
            request(1);
        }
        @Override public void onError(Throwable t) {
            t.printStackTrace();
        }
        @Override public void onComplete() {
            System.out.println("Done!");
        }
    });
// ...
d.dispose();

Field Summary

Modifier and TypeField and Description
pack-priv final AtomicReference<Subscription>

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
protected final void
cancel()

Cancels the Subscription set via onSubscribe(Subscription) or makes sure a Subscription set asynchronously (later) is cancelled immediately.

public final void
dispose()

Implements io.reactivex.rxjava3.disposables.Disposable.dispose.

Dispose the resource, the operation should be idempotent.
public final boolean
isDisposed()

Implements io.reactivex.rxjava3.disposables.Disposable.isDisposed.

Returns true if this resource has been disposed.
protected void
onStart()

Called once the single upstream Subscription is set via onSubscribe(Subscription).

public final void
protected final void
request(long
the request amount, positive
n
)

Requests the specified amount from the upstream if its Subscription is set via onSubscribe already.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

upstreamback to summary
pack-priv final AtomicReference<Subscription> upstream

Constructor Detail

DisposableSubscriberback to summary
public DisposableSubscriber()

Method Detail

cancelback to summary
protected final void cancel()

Cancels the Subscription set via onSubscribe(Subscription) or makes sure a Subscription set asynchronously (later) is cancelled immediately.

This method is thread-safe and can be exposed as a public API.

disposeback to summary
public final void dispose()

Implements io.reactivex.rxjava3.disposables.Disposable.dispose.

Doc from io.reactivex.rxjava3.disposables.Disposable.dispose.

Dispose the resource, the operation should be idempotent.

Annotations
@Override
isDisposedback to summary
public final boolean isDisposed()

Implements io.reactivex.rxjava3.disposables.Disposable.isDisposed.

Doc from io.reactivex.rxjava3.disposables.Disposable.isDisposed.

Returns true if this resource has been disposed.

Returns:boolean

true if this resource has been disposed

Annotations
@Override
onStartback to summary
protected void onStart()

Called once the single upstream Subscription is set via onSubscribe(Subscription).

onSubscribeback to summary
public final void onSubscribe(Subscription s)

Implements org.reactivestreams.Subscriber.onSubscribe.

Doc from org.reactivestreams.Subscriber.onSubscribe.

Invoked after calling Publisher#subscribe(Subscriber).

No data will start flowing until Subscription#request(long) is invoked.

It is the responsibility of this Subscriber instance to call Subscription#request(long) whenever more data is wanted.

The Publisher will send notifications only in response to Subscription#request(long).

Parameters
s:Subscription

the Subscription that allows requesting data via Subscription#request(long)

Annotations
@Override
requestback to summary
protected final void request(long n)

Requests the specified amount from the upstream if its Subscription is set via onSubscribe already.

Note that calling this method before a Subscription is set via onSubscribe(Subscription) leads to NullPointerException and meant to be called from inside onStart() or onNext(Object).

Parameters
n:long

the request amount, positive