語言

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
繼承
屬性

備註

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

這些介面對應於 反應式串流 規範。 它們適用於並行與分散式非同步環境:所有(七種)方法皆以「單向」訊息格式定義 void 。 通訊依賴一種簡單的流量控制(方法 Subscription#request),可用以避免在「推送」系統中可能出現的資源管理問題。

<b>範例。</b> A 通常會Publisher自行定義實作;在 方法 Subscription 中建構 實作並發出給呼叫subscribeSubscriber者。 它以非同步方式發佈項目給訂閱者,通常使用 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);
                }
              }
            }}

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 作為根據預期速率、資源與使用情況選擇流量元件請求大小與容量的有用起點。 或者,當不需要流量控制時,訂閱者一開始可能會請求一個實際上無限數量的項目,例如:

{@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 檔。

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

屬性

名稱 Description
Class

回傳此 Object的執行時類別。

(繼承來源 Object)
Handle

底層 Android 實例的帳號。

(繼承來源 Object)
JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

(繼承來源 JavaObject)
JniPeerMembers

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
ThresholdClass

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

(繼承來源 Object)
ThresholdType

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

(繼承來源 Object)

方法

名稱 Description
Clone()

建立並回傳此物件的副本。

(繼承來源 Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

(繼承來源 JavaObject)
DefaultBufferSize()

回傳 Publisher 或 Subscriber 緩衝的預設值,該值可在無其他限制時使用。

Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

(繼承來源 JavaObject)
Equals(Object)

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
JavaFinalize()
已淘汰.

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

(繼承來源 JavaObject)
ToArray<T>()

從這個 Java 陣列包裝器建立一個受管理陣列。

(繼承來源 Object)
ToString()

回傳物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

將此 Java 節點從互通執行時中取消註冊。

(繼承來源 Object)
Wait()

導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。

(繼承來源 Object)
Wait(Int64, Int32)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)
Wait(Int64)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)

明確介面實作

名稱 Description
IJavaPeerable.Disposed()

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

(繼承來源 JavaObject)
IJavaPeerable.Finalized()

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

(繼承來源 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

(繼承來源 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

(繼承來源 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

(繼承來源 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

(繼承來源 JavaObject)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

相互關聯的介面與靜態方法,用於建立流量控制元件,其中 Publisher Publishers 產生由一個或多個 Subscriber Subscribers消耗的項目,每個項目由 Subscription Subscription管理。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於