Freigeben über


Flow Klasse

Definition

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht 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

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

Diese Schnittstellen entsprechen der Spezifikation für reaktive Datenströme . Sie gelten sowohl in gleichzeitigen als auch in verteilten asynchronen Einstellungen: Alle (sieben) Methoden werden im void Nachrichtenstil "unidirektionale" 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; erstellen sie in der Methode subscribe und ausgeben sie an den Aufruf Subscriber. Es veröffentlicht Elemente asynchron für den Abonnent, normalerweise mit einem Executor. Hier ist beispielsweise ein sehr einfacher Herausgeber, der nur ein einzelnes Element eines einzelnen TRUE Abonnents ausgibt (wenn angefordert). Da der Abonnent nur ein einzelnes Element empfängt, verwendet diese Klasse keine Pufferung und Sortiersteuerung, 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);
                }
              }
            }}

Eine Subscriber Anordnung, die Elemente angefordert und verarbeitet werden. Elemente (Aufrufe von Subscriber#onNext) werden nur ausgestellt, wenn sie angefordert werden, aber mehrere Elemente können angefordert werden. Viele Abonnentenimplementierungen können dies im Stil des folgenden Beispiels anordnen, bei dem eine Puffergröße von 1 Einzelschritten und größere Größen in der Regel eine effizientere überlappende Verarbeitung mit weniger Kommunikation ermöglichen; Beispielsweise mit dem Wert 64 behält dies insgesamt noch offene Anforderungen zwischen 32 und 64 bei. Da Aufrufe der Abonnentenmethode für einen bestimmten Subscription Typ streng sortiert sind, ist es nicht erforderlich, dass diese Methoden Sperrungen oder Veränderliche Verwenden, es sei denn, ein Abonnent verwaltet mehrere Abonnements (in diesem Fall ist es besser, mehrere Abonnenten zu definieren, jeweils mit seinem eigenen Abonnement).

{@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 kann #defaultBufferSize einen nützlichen Ausgangspunkt für die Auswahl von Anforderungsgrößen und -kapazitäten in Flow-Komponenten basierend auf erwarteten Raten, Ressourcen und Verwendungen bieten. Oder, wenn die Ablaufsteuerung nie benötigt wird, kann ein Abonnent zunächst eine effektiv ungebundene 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) { ... }
            }}

Hinzugefügt in 9.

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

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Eigenschaften

Class

Gibt die Laufzeitklasse dieses Werts Objectzurück.

(Geerbt von Object)
Handle

Das Handle für die zugrunde liegende Android-Instanz.

(Geerbt von Object)
JniIdentityHashCode

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)
JniPeerMembers

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

PeerReference

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht 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 Publisher- oder Subscriber-Pufferung zurück, der möglicherweise ohne andere Einschränkungen verwendet werden kann.

Dispose()

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)
Dispose(Boolean)

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)
Equals(Object)

Gibt an, ob ein anderes Objekt "gleich" diesem Objekt 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 bestimmt, dass keine weiteren Verweise 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>()

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)
Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch em benachrichtigt/em> oder <em>unterbrochen</em>.<><

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IJavaPeerable.Disposed()

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)
IJavaPeerable.Finalized()

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine android-laufzeitgecheckte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

GetJniTypeName(IJavaPeerable)

In Beziehung stehende Schnittstellen und statische Methoden zum Einrichten von flussgesteuerten Komponenten, in denen elemente erzeugt werden, die Publisher Publishers von einem oder Subscriber Subscribersmehreren von einem Subscription Subscriptionverwalteten Element verbraucht werden.

Gilt für: