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 可能會根據預期的速率、資源和使用量,提供在 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.util.concurrent.FlowJava 檔。

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

屬性

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 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。

(繼承來源 Object)
ThresholdType

此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。

(繼承來源 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 <notified/em>或<em>interrupted</em> 來喚醒它。<>

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

讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。

(繼承來源 Object)
Wait(Int64)

讓目前的線程等到喚醒為止,通常是因為 <em>notified</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的專案。

適用於