Flow Klasse

Definition

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

[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
Vererbung
Flow
Attribute

Hinweise

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

Diese Schnittstellen entsprechen der Spezifikation für reaktive Datenströme . Sie gelten sowohl in gleichzeitigen als auch verteilten asynchronen Einstellungen: Alle (sieben) Methoden werden im void "unidirektionalen" Nachrichtenstil definiert. Die Kommunikation basiert auf einer einfachen Form der Flusssteuerung (Methode Subscription#request), die verwendet werden kann, um Ressourcenverwaltungsprobleme zu vermeiden, die andernfalls in pushbasierten Systemen auftreten können.

<b>Beispiele.</b> A Publisher definiert in der Regel eine eigene Subscription Implementierung. Erstellt eine in der -Methode subscribe und gibt sie an den aufrufenden Subscriberaus. Es veröffentlicht Elemente asynchron für den Abonnenten, normalerweise unter Verwendung von Executor. Hier ist z. B. ein sehr einfacher Herausgeber, der nur (bei Anforderung) ein einzelnes TRUE Element für einen einzelnen Abonnenten ausgibt. Da der Abonnent nur ein einzelnes Element empfängt, verwendet diese Klasse keine Puffer- und Bestellsteuerung, die in den meisten Implementierungen erforderlich ist.

{@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);
                }
              }
            }}

Ein Subscriber ordnet an, dass Elemente angefordert und verarbeitet werden. Elemente (Aufrufe von Subscriber#onNext) werden nur ausgegeben, wenn sie angefordert werden, aber es können mehrere Elemente angefordert werden. Viele Abonnentenimplementierungen können dies im Stil des folgenden Beispiels anordnen, wobei eine Puffergröße von 1 einzelnen Schritten und größere Größen in der Regel eine effizientere überlappende Verarbeitung mit weniger Kommunikation ermöglichen. Bei einem Wert von 64 bleibt die Gesamtzahl der ausstehenden Anforderungen zwischen 32 und 64. Da Aufrufe der Abonnentenmethode für eine bestimmte Methode Subscription streng geordnet sind, müssen diese Methoden keine Sperren oder flüchtigen Elemente verwenden, es sei denn, ein Abonnent verwaltet mehrere Abonnements (in diesem Fall ist es besser, stattdessen mehrere Abonnenten zu definieren, die jeweils ein eigenes Abonnement haben).

{@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() {}
            }}

Der Standardwert von #defaultBufferSize bietet möglicherweise einen nützlichen Ausgangspunkt für die Auswahl von Anforderungsgrößen und -kapazitäten in Flow-Komponenten basierend auf erwarteten Raten, Ressourcen und Nutzungen. Oder, wenn die Flusssteuerung nie benötigt wird, kann ein Abonnent zunächst eine effektiv unbegrenzte Anzahl von Elementen anfordern, wie 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) { ... }
            }}

In 9 hinzugefügt.

Java-Dokumentation für java.util.concurrent.Flow.

Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In der Attribution License beschriebenen Begriffen verwendet werden.

Eigenschaften

Class

Gibt die Laufzeitklasse dieses Objectzurück.

(Geerbt von Object)
Handle

Das Handle zum zugrunde liegenden Android-instance.

(Geerbt von Object)
JniIdentityHashCode

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
JniPeerMembers

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

PeerReference

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
ThresholdClass

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

(Geerbt von Object)
ThresholdType

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

(Geerbt von Object)

Methoden

Clone()

Erstellt und gibt eine Kopie dieses Objekts zurück.

(Geerbt von Object)
DefaultBufferSize()

Gibt einen Standardwert für den Verleger- oder Abonnentenpuffer zurück, der ohne andere Einschränkungen verwendet werden kann.

Dispose()

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
Dispose(Boolean)

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
Equals(Object)

Gibt an, ob ein anderes Objekt diesem "gleich" ist.

(Geerbt von Object)
GetHashCode()

Gibt einen Hashcodewert für das Objekt zurück.

(Geerbt von Object)
JavaFinalize()

Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection feststellt, dass keine Verweise mehr auf das Objekt vorhanden sind.

(Geerbt von Object)
Notify()

Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet.

(Geerbt von Object)
NotifyAll()

Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten.

(Geerbt von Object)
SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
ToArray<T>()

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel durch em benachrichtigen/em> oder <em>interrupted</em>.<><

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IJavaPeerable.Disposed()

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
IJavaPeerable.Finalized()

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine Für Android-Runtime überprüfte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

GetJniTypeName(IJavaPeerable)

Miteinander verbundene Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen Elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren verwendet werden, die jeweils von einem Subscription Subscriptionverwaltet werden.

Gilt für: