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 oggetto Subscription Subscription.

[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 oggetto Subscription Subscription.

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

<b>Esempi.</b> A Publisher definisce in genere la propria Subscription implementazione, creandone una nel metodo subscribe ed eseguendola alla chiamata Subscriberdi . Pubblica gli elementi nel sottoscrittore in modo asincrono, in genere usando un oggetto Executor. Ad esempio, di seguito è riportato un server di pubblicazione molto semplice che genera un solo TRUE elemento (quando richiesto) a un singolo 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);
                }
              }
            }}

Dispone Subscriber gli elementi da richiedere ed elaborare. Gli elementi (chiamate di Subscriber#onNext) non vengono emessi a meno che non venga richiesto, ma è possibile richiedere più elementi. Molte implementazioni del Sottoscrittore possono disporre questo aspetto nello stile dell'esempio seguente, in cui una dimensione del buffer di 1 singolo passaggio e dimensioni maggiori in genere consentono un'elaborazione più efficiente sovrapposta con una minore 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 del Sottoscrittore per un determinato Subscription oggetto sono rigorosamente ordinate, non è necessario che questi metodi usino blocchi o volatili, a meno che un Sottoscrittore non gestisca più sottoscrizioni( in questo caso è preferibile definire invece 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 la scelta delle dimensioni e delle capacità delle richieste nei componenti di Flow in base a frequenze, risorse e utilizzi previsti. In alternativa, quando il controllo del flusso non è mai necessario, un sottoscrittore potrebbe inizialmente richiedere un numero di elementi effettivamente non associato, 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) { ... }
            }}

Aggiunta in 9.

Documentazione java per java.util.concurrent.Flow.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

Proprietà

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
Handle

Handle per l'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 oggetto Subscription Subscription.

(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 oggetto Subscription Subscription.

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 oggetto Subscription Subscription.

(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 buffering del server di pubblicazione o del Sottoscrittore, che può essere utilizzato 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 oggetto Subscription Subscription.

(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 oggetto Subscription Subscription.

(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 su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto .

(Ereditato da Object)
Notify()

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

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitor 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 oggetto Subscription Subscription.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione di 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 oggetto Subscription Subscription.

(Ereditato da Object)
Wait()

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>.

(Ereditato da Object)
Wait(Int64)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo>< 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)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo>< 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 oggetto Subscription Subscription.

(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 oggetto Subscription Subscription.

(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 oggetto Subscription Subscription.

(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 oggetto Subscription Subscription.

(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 oggetto Subscription Subscription.

(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 oggetto Subscription Subscription.

(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 oggetto Subscription Subscription.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo di tipo controllato 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 oggetto Subscription Subscription.

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 oggetto Subscription Subscription.

Si applica a