Condividi tramite


Flow Classe

Definizione

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

[Android.Runtime.Register("java/util/concurrent/Flow", ApiSince=30, DoNotGenerateAcw=true)]
public sealed class Flow : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/Flow", ApiSince=30, DoNotGenerateAcw=true)>]
type Flow = class
    inherit Object
Ereditarietà
Flow
Attributi

Commenti

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

Queste interfacce corrispondono alla specifica dei flussi reattivi . Si applicano sia nelle impostazioni asincrone simultanee che distribuite: tutti i metodi (sette) vengono definiti in void stile messaggio "unidirezionale". La comunicazione si basa su una semplice forma di controllo del flusso (metodo Subscription#request) che può essere usata per evitare problemi di gestione delle risorse che potrebbero verificarsi in caso contrario nei sistemi basati su "push".

<b>Esempi.</b> A Publisher definisce in genere la propria Subscription implementazione; la costruzione di uno nel metodo subscribe e l'emissione al chiamante Subscriber. Pubblica gli elementi nel sottoscrittore in modo asincrono, in genere usando un Executoroggetto . Ad esempio, ecco un server di pubblicazione molto semplice che genera solo problemi (quando richiesto) un singolo elemento a un singolo TRUE sottoscrittore. Poiché il sottoscrittore riceve solo un singolo elemento, questa classe non usa il buffering e il controllo di ordinamento necessari nella maggior parte delle implementazioni.

{@code
            class OneShotPublisher implements Publisher<Boolean> {
              private final ExecutorService executor = ForkJoinPool.commonPool(); // daemon-based
              private boolean subscribed; // true after first subscribe
              public synchronized void subscribe(Subscriber<? super Boolean> subscriber) {
                if (subscribed)
                  subscriber.onError(new IllegalStateException()); // only one allowed
                else {
                  subscribed = true;
                  subscriber.onSubscribe(new OneShotSubscription(subscriber, executor));
                }
              }
              static class OneShotSubscription implements Subscription {
                private final Subscriber<? super Boolean> subscriber;
                private final ExecutorService executor;
                private Future<?> future; // to allow cancellation
                private boolean completed;
                OneShotSubscription(Subscriber<? super Boolean> subscriber,
                                    ExecutorService executor) {
                  this.subscriber = subscriber;
                  this.executor = executor;
                }
                public synchronized void request(long n) {
                  if (!completed) {
                    completed = true;
                    if (n <= 0) {
                      IllegalArgumentException ex = new IllegalArgumentException();
                      executor.execute(() -> subscriber.onError(ex));
                    } else {
                      future = executor.submit(() -> {
                        subscriber.onNext(Boolean.TRUE);
                        subscriber.onComplete();
                      });
                    }
                  }
                }
                public synchronized void cancel() {
                  completed = true;
                  if (future != null) future.cancel(false);
                }
              }
            }}

Un Subscriber oggetto dispone che gli elementi vengano richiesti ed elaborati. Gli elementi (chiamate di Subscriber#onNext) non vengono rilasciati a meno che non siano richiesti, ma è possibile richiedere più elementi. Molte implementazioni del Sottoscrittore possono disporre questo nello stile dell'esempio seguente, in cui una dimensione del buffer di 1 passaggi singoli e dimensioni maggiori in genere consente un'elaborazione più efficiente sovrapposta con meno comunicazione; ad esempio con un valore pari a 64, questo mantiene il totale delle richieste in sospeso tra 32 e 64. Poiché le chiamate al metodo Sottoscrittore per un determinato Subscription oggetto sono rigorosamente ordinate, non è necessario che questi metodi usino blocchi o volatili a meno che un Sottoscrittore non mantiene più sottoscrizioni(in questo caso è preferibile definire più Sottoscrittori, ognuno con la propria sottoscrizione).

{@code
            class SampleSubscriber<T> implements Subscriber<T> {
              final Consumer<? super T> consumer;
              Subscription subscription;
              final long bufferSize;
              long count;
              SampleSubscriber(long bufferSize, Consumer<? super T> consumer) {
                this.bufferSize = bufferSize;
                this.consumer = consumer;
              }
              public void onSubscribe(Subscription subscription) {
                long initialRequestSize = bufferSize;
                count = bufferSize - bufferSize / 2; // re-request when half consumed
                (this.subscription = subscription).request(initialRequestSize);
              }
              public void onNext(T item) {
                if (--count <= 0)
                  subscription.request(count = bufferSize - bufferSize / 2);
                consumer.accept(item);
              }
              public void onError(Throwable ex) { ex.printStackTrace(); }
              public void onComplete() {}
            }}

Il valore predefinito di #defaultBufferSize può fornire un punto di partenza utile per scegliere le dimensioni delle richieste e le capacità nei componenti flow in base alle tariffe, alle risorse e agli usi previsti. In alternativa, quando il controllo del flusso non è mai necessario, un sottoscrittore potrebbe richiedere inizialmente un numero di elementi in uscita in modo efficace, come in:

{@code
            class UnboundedSubscriber<T> implements Subscriber<T> {
              public void onSubscribe(Subscription subscription) {
                subscription.request(Long.MAX_VALUE); // effectively unbounded
              }
              public void onNext(T item) { use(item); }
              public void onError(Throwable ex) { ex.printStackTrace(); }
              public void onComplete() {}
              void use(T item) { ... }
            }}

Aggiunto in 9.

Documentazione Java per java.util.concurrent.Flow.

Le parti di questa pagina sono modifiche in base al lavoro creato e condiviso dal Android Open Source e usato in base ai termini descritti nella .

Proprietà

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
Handle

Handle all'istanza di Android sottostante.

(Ereditato da Object)
JniIdentityHashCode

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
JniPeerMembers

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

PeerReference

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
ThresholdClass

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)
ThresholdType

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)

Metodi

Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
DefaultBufferSize()

Restituisce un valore predefinito per il buffer del server di pubblicazione o del Sottoscrittore, che può essere usato in assenza di altri vincoli.

Dispose()

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
Dispose(Boolean)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
GetHashCode()

Restituisce un valore del codice hash per l'oggetto.

(Ereditato da Object)
JavaFinalize()

Chiamato dal Garbage Collector in un oggetto quando Garbage Collection determina che non sono presenti più riferimenti all'oggetto.

(Ereditato da Object)
Notify()

Riattiva un singolo thread in attesa del monitoraggio dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitoraggio dell'oggetto.

(Ereditato da Object)
SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
ToArray<T>()

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
ToString()

Restituisce una rappresentazione in formato stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
Wait()

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere eseguendo>una notifica</em o <em interrotto</>em>>.<

(Ereditato da Object)
Wait(Int64)

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale.

(Ereditato da Object)
Wait(Int64, Int32)

Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

IJavaPeerable.Disposed()

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
IJavaPeerable.Finalized()

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione dei tipi controllati dal runtime Android.

JavaCast<TResult>(IJavaObject)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

GetJniTypeName(IJavaPeerable)

Interfacce correlate e metodi statici per stabilire componenti controllati dal flusso in cui Publisher Publishers produrre elementi utilizzati da uno o più Subscriber Subscribers, ognuno gestito da un Subscription Subscriptionoggetto .

Si applica a