다음을 통해 공유


Flow 클래스

정의

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 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
특성

설명

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

이러한 인터페이스는 반응형 스트림 사양에 해당 합니다 . 동시 및 분산 비동기 설정 모두에 적용됩니다. 모든(7개) 메서드는 "단방향" 메시지 스타일로 정의 void 됩니다. 통신은 "푸시" 기반 시스템에서 발생할 수 있는 리소스 관리 문제를 방지하는 데 사용할 수 있는 간단한 형태의 흐름 제어(메서드 Subscription#request)를 사용합니다.

<b>예.</b> Publisher A는 일반적으로 자체 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

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
JniPeerMembers

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

PeerReference

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
ThresholdClass

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

(다음에서 상속됨 Object)
ThresholdType

이 API는 Android용 Mono 인프라를 지원하며 코드에서 직접 사용할 수 없습니다.

(다음에서 상속됨 Object)

메서드

Clone()

이 개체의 복사본을 만들고 반환합니다.

(다음에서 상속됨 Object)
DefaultBufferSize()

다른 제약 조건이 없는 경우 사용할 수 있는 게시자 또는 구독자 버퍼링의 기본값을 반환합니다.

Dispose()

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
Dispose(Boolean)

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
Equals(Object)

다른 개체가 이 개체와 "같음"인지 여부를 나타냅니다.

(다음에서 상속됨 Object)
GetHashCode()

개체에 대한 해시 코드 값을 반환합니다.

(다음에서 상속됨 Object)
JavaFinalize()

가비지 수집에서 개체에 대한 참조가 더 이상 없다고 판단할 때 개체의 가비지 수집기에서 호출됩니다.

(다음에서 상속됨 Object)
Notify()

이 개체의 모니터에서 대기 중인 단일 스레드를 해제합니다.

(다음에서 상속됨 Object)
NotifyAll()

이 개체의 모니터에서 대기 중인 모든 스레드를 해제합니다.

(다음에서 상속됨 Object)
SetHandle(IntPtr, JniHandleOwnership)

Handle 속성을 설정합니다.

(다음에서 상속됨 Object)
ToArray<T>()

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
ToString()

개체의 문자열 표현을 반환합니다.

(다음에서 상속됨 Object)
UnregisterFromRuntime()

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
Wait()

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 <><중단/종료>합니다.>

(다음에서 상속됨 Object)
Wait(Int64, Int32)

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <>알림을 받<거나 <중단/>종료><>하거나 일정량의 실시간 경과가 발생할 때까지 대기합니다.

(다음에서 상속됨 Object)
Wait(Int64)

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <>알림을 받<거나 <중단/>종료><>하거나 일정량의 실시간 경과가 발생할 때까지 대기합니다.

(다음에서 상속됨 Object)

명시적 인터페이스 구현

IJavaPeerable.Disposed()

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
IJavaPeerable.DisposeUnlessReferenced()

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
IJavaPeerable.Finalized()

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
IJavaPeerable.JniManagedPeerState

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

(다음에서 상속됨 Object)

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

GetJniTypeName(IJavaPeerable)

하나 이상Subscriber Subscribers에서 사용하는 항목을 생성하는 흐름 제어 구성 요소를 Publisher Publishers 설정하기 위한 상호 관련된 인터페이스 및 정적 메서드이며, 각각에 Subscription Subscription의해 관리됩니다.

적용 대상