Flow クラス

定義

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

[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
属性

注釈

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

これらのインターフェイスは、リアクティブ ストリーム仕様に対応します。 これらは、同時実行と分散の両方の非同期設定に適用されます。すべての (7 つの) メソッドは、"一方向" メッセージ スタイルで void 定義されます。 通信は、"プッシュ" ベースのシステムで発生する可能性があるリソース管理の問題を回避するために使用できる単純な形式のフロー制御 (メソッド Subscription#request) に依存します。

<b>例。</b> A Publisher は通常、独自 Subscription の実装を定義します。メソッド subscribe で 1 つを構築し、それを呼び出し元 Subscriberに発行します。 通常 Executorは 、 . たとえば、1 つのサブスクライバーに対して 1 つの TRUE 項目のみを発行する (要求された場合) 非常に単純な発行元を次に示します。 サブスクライバーは 1 つの項目のみを受け取るため、このクラスでは、ほとんどの実装で必要なバッファリングと順序付けコントロールは使用されません。

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

A 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 は、予想されるレート、リソース、および使用状況に基づいて Flow コンポーネントの要求サイズと容量を選択するための便利な開始点となる場合があります。 または、フロー制御が不要な場合、サブスクライバーは最初に、次のように実質的に無制限の数の項目を要求する場合があります。

{@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 ドキュメントjava.util.concurrent.Flow

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

プロパティ

Class

この Objectランタイム クラスを返します。

(継承元 Object)
Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
JniIdentityHashCode

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
JniPeerMembers

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

PeerReference

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
ThresholdClass

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 Object)
ThresholdType

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 Object)

メソッド

Clone()

このオブジェクトのコピーを作成して返します。

(継承元 Object)
DefaultBufferSize()

他の制約がない場合に使用できる、パブリッシャーまたはサブスクライバーのバッファリングの既定値を返します。

Dispose()

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
Dispose(Boolean)

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
Equals(Object)

他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。

(継承元 Object)
GetHashCode()

オブジェクトのハッシュ コード値を返します。

(継承元 Object)
JavaFinalize()

オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。

(継承元 Object)
Notify()

このオブジェクトのモニターで待機している 1 つのスレッドを起動します。

(継承元 Object)
NotifyAll()

このオブジェクトのモニターで待機しているすべてのスレッドを起動します。

(継承元 Object)
SetHandle(IntPtr, JniHandleOwnership)

Handle プロパティを設定します。

(継承元 Object)
ToArray<T>()

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
ToString()

オブジェクトの文字列表現を返します。

(継承元 Object)
UnregisterFromRuntime()

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
Wait()

現在のスレッドが目覚めるまで待機させます。通常<は、通知<>/em> または <em>割り込み/em> を受け<取ります。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドが目覚めるまで待機します。通常<><は、通知/em> または <em>中断</em> によって、または一定のリアルタイムが経過するまで待機します。

(継承元 Object)
Wait(Int64)

現在のスレッドが目覚めるまで待機します。通常<><は、通知/em> または <em>中断</em> によって、または一定のリアルタイムが経過するまで待機します。

(継承元 Object)

明示的なインターフェイスの実装

IJavaPeerable.Disposed()

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
IJavaPeerable.DisposeUnlessReferenced()

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
IJavaPeerable.Finalized()

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
IJavaPeerable.JniManagedPeerState

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

(継承元 Object)

拡張メソッド

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

GetJniTypeName(IJavaPeerable)

相互Subscription Subscriptionに関連するインターフェイスと、1 つ以上Subscriber Subscribersによって消費される項目を生成するPublisher Publishersフロー制御コンポーネントを確立するための静的メソッド。

適用対象