Flow 类

定义

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 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
继承
Flow
属性

注解

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

这些接口对应于 反应流 规范。 它们同时适用于并发和分布式异步设置:所有 (七个) 方法都以 void “单向”消息样式定义。 通信依赖于一种简单形式的流控制 (方法 Subscription#request) ,可用于避免在基于“推送”的系统中可能出现的资源管理问题。

<b>示例。</b> A Publisher 通常定义自己的 Subscription 实现;在 方法 subscribe 中构造一个实现,并将其颁发给调用 Subscriber。 它以异步方式将项发布到订阅服务器,通常使用 Executor。 例如,下面是一个非常简单的发布者,它仅在请求) 单个订阅者单个 TRUE 项时发出 (。 由于订阅服务器仅接收单个项,因此此类不使用大多数实现中所需的缓冲和排序控件。

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

安排 Subscriber 请求和处理项。 除非请求,否则不会发出 (调用 Subscriber#onNext) 的项,但可能会请求多个项。 许多订阅服务器实现可以采用以下示例的样式来安排此操作,其中缓冲区大小为 1 个单步,而更大的大小通常允许更高效的重叠处理和更少的通信;例如,如果值为 64,则总未完成请求数保持在 32 到 64 之间。 由于给定 Subscription 的订阅服务器方法调用是严格排序的,因此这些方法不需要使用锁或可变项,除非订阅服务器维护多个订阅 (在这种情况下,最好改为定义多个订阅服务器,每个订阅服务器都有自己的订阅) 。

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

的默认值 #defaultBufferSize 可以提供一个有用的起点,用于根据预期的速率、资源和使用情况在流组件中选择请求大小和容量。 或者,当从不需要流控制时,订阅者最初可能会请求有效无限制的项数,如:

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

在 9 中添加。

java.util.concurrent.FlowJava 文档。

此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。

属性

Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
JniIdentityHashCode

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
JniPeerMembers

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

PeerReference

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
ThresholdClass

此 API 支持 Mono for Android 基础结构,不应直接从代码使用。

(继承自 Object)
ThresholdType

此 API 支持 Mono for Android 基础结构,不应直接从代码使用。

(继承自 Object)

方法

Clone()

创建并返回此对象的副本。

(继承自 Object)
DefaultBufferSize()

返回发布服务器或订阅服务器缓冲的默认值,可在没有其他约束的情况下使用。

Dispose()

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
Dispose(Boolean)

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
Equals(Object)

指示其他某个对象是否“等于”此对象。

(继承自 Object)
GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
JavaFinalize()

当垃圾回收确定不再引用对象时,由对象上的垃圾回收器调用。

(继承自 Object)
Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
ToArray<T>()

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
ToString()

返回对象的字符串表示形式。

(继承自 Object)
UnregisterFromRuntime()

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
Wait()

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<>

(继承自 Object)
Wait(Int64)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)
Wait(Int64, Int32)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)

显式接口实现

IJavaPeerable.Disposed()

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
IJavaPeerable.DisposeUnlessReferenced()

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
IJavaPeerable.Finalized()

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
IJavaPeerable.JniManagedPeerState

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

(继承自 Object)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

GetJniTypeName(IJavaPeerable)

用于建立流控制组件的相互关联的接口和静态方法,其中 Publisher Publishers 生成由一个或多个 Subscriber Subscribers使用的项,每个项由 管理 Subscription Subscription

适用于