Lenguaje

Flow Clase

Definición

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .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
Herencia
Atributos

Comentarios

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

Estas interfaces corresponden a la especificación de flujos reactivos . Se aplican tanto en la configuración asincrónica simultánea como distribuida: todos los métodos (siete) se definen en void el estilo de mensaje "unidireccional". La comunicación se basa en una forma sencilla de control de flujo (método Subscription#request) que se puede usar para evitar problemas de administración de recursos que pueden producirse en sistemas basados en "inserción".

<b>Ejemplos.</b> Normalmente Publisher define su propia Subscription implementación; construye una en el método subscribe y la emite a la llamada Subscribera . Publica elementos en el suscriptor de forma asincrónica, normalmente mediante .Executor Por ejemplo, este es un publicador muy sencillo que solo emite (cuando se solicita) un solo elemento a un solo TRUE suscriptor. Dado que el suscriptor recibe solo un solo elemento, esta clase no usa el almacenamiento en búfer ni el control de ordenación necesarios en la mayoría de las implementaciones.

{@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 organiza que se solicitan y procesan los elementos. Los elementos (invocaciones de Subscriber#onNext) no se emiten a menos que se soliciten, pero se pueden solicitar varios elementos. Muchas implementaciones de suscriptor pueden organizar esto en el estilo del ejemplo siguiente, donde un tamaño de búfer de 1 solo pasos y tamaños más grandes normalmente permiten un procesamiento superpuesto más eficaz con menos comunicación; por ejemplo, con un valor de 64, esto mantiene el total de solicitudes pendientes entre 32 y 64. Dado que las invocaciones de método de suscriptor para un determinado Subscription están estrictamente ordenadas, no es necesario que estos métodos usen bloqueos o volátiles a menos que un suscriptor mantenga varias suscripciones (en cuyo caso es mejor definir varios suscriptores, cada uno con su propia suscripción).

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

El valor predeterminado de puede proporcionar un punto de #defaultBufferSize partida útil para elegir tamaños y capacidades de solicitud en componentes de Flow en función de las tasas, recursos y usos esperados. O bien, cuando nunca se necesita el control de flujo, un suscriptor puede solicitar inicialmente un número de elementos sin enlazar eficazmente, como en:

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

Agregado en 9.

Java documentación para java.util.concurrent.Flow.

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.

Propiedades

Nombre Description
Class

Devuelve la clase en tiempo de ejecución de este Objectobjeto .

(Heredado de Object)
Handle

Identificador de la instancia de Android subyacente.

(Heredado de Object)
JniIdentityHashCode

Obtiene el código hash de identidad asignado a este Java del mismo nivel por el tiempo de ejecución de interoperabilidad.

(Heredado de Object)
JniManagedPeerState

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

(Heredado de JavaObject)
JniPeerMembers

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

PeerReference

Obtiene la referencia de objeto JNI para este Java del mismo nivel.

(Heredado de Object)
ThresholdClass

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

(Heredado de Object)
ThresholdType

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

(Heredado de Object)

Métodos

Nombre Description
Clone()

Crea y devuelve una copia de este objeto.

(Heredado de Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

(Heredado de JavaObject)
DefaultBufferSize()

Devuelve un valor predeterminado para Publisher o el almacenamiento en búfer del suscriptor, que se puede usar en ausencia de otras restricciones.

Dispose()

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
Dispose(Boolean)

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
DisposeUnlessReferenced()

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

(Heredado de JavaObject)
Equals(Object)

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

(Heredado de JavaObject)
Equals(Object)

Indica si algún otro objeto es "igual a" este.

(Heredado de Object)
GetHashCode()

Devuelve un valor de código hash para el objeto .

(Heredado de Object)
JavaFinalize()
Obsoletos.

Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto .

(Heredado de Object)
Notify()

Activa un único subproceso que está esperando en el monitor de este objeto.

(Heredado de Object)
NotifyAll()

Activa todos los subprocesos que están esperando en el monitor de este objeto.

(Heredado de Object)
SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

(Heredado de JavaObject)
ToArray<T>()

Crea una matriz administrada a partir de este contenedor de matriz Java.

(Heredado de Object)
ToString()

Devuelve una representación de cadena del objeto .

(Heredado de Object)
UnregisterFromRuntime()

Anula el registro de este Java del mismo nivel del tiempo de ejecución de interoperabilidad.

(Heredado de Object)
Wait()

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser em notificado/em< o >em<interrumpido>/em<.><>

(Heredado de Object)
Wait(Int64, Int32)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
Wait(Int64)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)

Implementaciones de interfaz explícitas

Nombre Description
IJavaPeerable.Disposed()

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

(Heredado de JavaObject)
IJavaPeerable.Finalized()

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

(Heredado de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

(Heredado de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

(Heredado de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

(Heredado de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

(Heredado de JavaObject)

Métodos de extensión

Nombre Description
GetJniTypeName(IJavaPeerable)

Obtiene el nombre JNI del tipo de la instancia self.

JavaAs<TResult>(IJavaPeerable)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

JavaCast<TResult>(IJavaObject)

Realiza una conversión de tipos comprobados en tiempo de ejecución de Android.

JavaCast<TResult>(IJavaObject)

Interfaces y métodos estáticos relacionados para establecer componentes controlados por flujo en los que Publisher Publishers se producen elementos consumidos por uno o varios Subscriber Subscribers, cada uno administrado por .Subscription Subscription

TryJavaCast<TResult>(IJavaPeerable, TResult)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

Se aplica a