Rxjava2 입문 강좌 2: Observable와 Observer 응답식 프로그래밍이 Rxjava2에서의 전형적인 실현

4681 단어 Rxjava
RxJava에서 함수 응답식 프로그래밍은 관찰자(Observer)가 관찰가능 대상(Observable)을 구독하는 것을 구체적으로 나타낸다. 관찰가능 대상을 만들어 데이터 흐름을 발사하고 일련의 조작자(Operators) 가공 처리와 스레드 스케줄러(Scheduler)가 서로 다른 스레드 사이에서 전송된다.마지막으로 관찰자가 받아들이고 응답하는 과정인 Observable Source와 Observer는 RxJava2에서 가장 전형적인 관찰자와 관찰 대상의 조합이고 다른 네 그룹은 이 그룹의 개선판이나 간소화판으로 볼 수 있다.
Observable
추상 클래스 Observable은 인터페이스 Observable Source 아래의 추상적인 실현으로 Observable를 통해 관찰 가능한 대상이 데이터를 발사하는 흐름을 만들 수 있습니다.
demo1_1.jpg
 
이전 예에서는 Observable을 호출했습니다.create 관찰 대상을 만들고 "Hello World"를 보내고 발송 완료를 알립니다
Observer
관찰자 Observer를 만들어서 관찰 대상이 발사한 데이터 흐름을 받아들이고 응답합니다
demo1_2.jpg
onNext 방법에서 관찰 대상이 발사한 데이터'Hello World'를 수신하고 응답 - 컨트롤러에 출력합니다.
Observer 구독 Observable
demo1_3.jpg
일단 Observer와 Observable가 구독 관계를 맺으면 Observer와 Observable는 하나의 전체가 되고 Observer는 Observable의 행위에 응답할 수 있다.
Emitter/Observer
Observable을 통해.create 관찰 대상을 만들 때 발사 동작을 구체적으로 수행하는 것은 인터페이스 Observable Emitter의 실례화 대상이고 Observable Emitter는 인터페이스 Emitter를 계승하며 원본 인터페이스 Emitter의 구체적인 코드는 다음과 같다.
public interface Emitter {
        // , , 
     void onNext(@NonNull T value);
        // , , 
        void onError(@NonNull Throwable error);
        // , , 
        void onComplete();
}

onNext: 데이터를 보내는 데 사용되며 여러 번 호출할 수 있습니다. 호출할 때마다 데이터를 보내는 onError: 이상 알림을 보내는 데 사용되며 한 번만 발송합니다. 여러 번 호출하면 첫 번째 onComplete만 발송합니다. 완료 알림을 보내는 데 사용되며 한 번만 발송하고 여러 번 호출하면 한 번만 발송합니다.
onError와 onComplete는 서로 배척한다. 두 가지 방법은 하나만 호출할 수 있고 동시에 호출할 수 없다. 데이터가 발송될 때 이상이 발생하면 onError로 이상 알림을 보낼 수도 있고 호출하지 않을 수도 있다. 왜냐하면 그 방법인subscribe는 이상을 던지기 때문이다. 만약에 데이터가 모두 발송된 후에 정상적으로 onComplete로 완성 알림을 보낼 수 있다.여기서 onError와 onComplete는 강제 호출되지 않습니다.인터페이스 Observer의 세 가지 방법(onNext,onError,onComplete)은 Emitter의 세 가지 방법과 서로 대응하여 각각 Emitter에서 대응하는 방법의 행위에 호응한다.Emitter가 onNext를 호출하여 데이터를 보낼 때, Observer는 onNext를 통해 데이터를 수신합니다.Emitter가 onError를 호출하여 이상 알림을 보낼 때, Observer는 onError를 통해 이상 알림을 받습니다.Emitter가 onComplete를 호출하여 완료 알림을 보낼 때, Observer는 onComplete를 통해 완료 알림을 받을 것입니다.
절차 간소화
중간 변수를 제거하면 이전 코드에 대해 다음과 같은 형식으로 간략화할 수 있습니다.
demo2.jpg
응답식 프로그래밍에 함수식 프로그래밍을 더하면 진정한 함수 응답식 프로그래밍은 코드를 다음과 같은 형식으로 간소화할 수 있다.
demo3.jpg
그 중에서just 조작부호는 봉인을 거친 후 한 개의 데이터를 발사하는 데 전문적으로 사용되는 것으로 하나의 데이터, 한 개의 문자, 하나의 대상, 하나의 전체 수조, 하나의 전체 집합이 될 수 있다.컨슈머는 관찰자 Observer 기능이 단일화된 후의 산물로 볼 수 있다. 소비자는 상례에서 컨슈머는 함수accept를 통해 관찰 대상이 발사한 데이터만 수신하고 이상 정보나 완성 정보를 받지 않는다.예외 정보를 수신하거나 완료하려면 다음 코드를 사용하십시오.
demo4.jpg
두 번째 인자Consumer는 함수 accept를 통해 비정상적인 정보를 범용하도록 규정합니다.세 번째 매개 변수인 Action도 관찰자 Observer 기능이 단일화된 후의 산물인 행동으로 함수run을 통해 완성된 정보를 수신하여 응답 행동을 한다.
전송 데이터 시퀀스
Observable는 하나의 데이터나 데이터 서열을 발송할 수 있습니다. 위의 사례는 모두 하나의 데이터'Hello World'를 발송하는 경우입니다. 그러면 어떻게 데이터 서열을 발송합니까? 가장 기초적인 방법을 통해
demo5.jpg
 
방법subscribe에서string 형식의 집합list의 요소를 순환한 다음emitter를 통과합니다.onNext(str)를 하나씩 보내기;발송 과정에서 이상이 발견되면emitter를 통해.onError(e)로 예외 메시지 보내기;마지막으로 데이터가 정상적으로 발송되면emitter를 호출합니다.onComplete()는 완료 알림을 보내고,Observer에서 onNext를 통해emitter가 보내는 모든 정보를 컨트롤러에 출력하고(emitter가 몇 번 보내면 Observer가 몇 번 받음),onError(Throwable)를 통해 이상 정보를 받고,onComplete()는 완료 메시지를 받는다.마찬가지로 조작부호를 통해 이를 간소화할 수 있다. 아래와 같다.
demo6.jpg
그 중에서fromIterable(list)도 봉인된 조작부호로 교체 가능한 대상의 모든 요소를 하나하나 발송할 수 있다
Disposable
이전의 예에서 볼 수 있듯이 Observer 인터페이스에서 말하지 않은 방법이 하나 더 있다
public void onSubscribe(Disposable d) {
}

이 방법에는 Disposable 유형의 매개 변수가 있는데 onSubscribe는 구독할 때 관찰자 Observer가 관찰가능 대상 Observable에 구독을 하고 구독 관계를 맺으면 이 방법을 촉발하고 Disposable 대상을 생성한다고 한다. 사실 관찰자 Observer가 어떤 방식으로 관찰가능 대상 Observable에 구독을 하든지 간에 Disposable를 생성한다. onSubscribe(Disposabled) 방법이 있든 다음과 같다.
demo7.jpg
Disposable 인터페이스의 소스를 보려면 다음과 같이 하십시오.
public interface Disposable {
        void dispose();
        boolean isDisposed();
}

Disposable는 관찰자 Observer가 관찰 대상 Observable와 구독 관계를 맺은 후 생성된 구독 관계를 취소하고 구독 관계의 존재 여부를 판단하는 인터페이스이다.관찰자 Observer와 관찰 대상 Observable 사이에 구독 관계가 있을 때만 Observer는 Observable가 보낸 데이터나 정보를 받을 수 있습니다.Observer가 Observable의 정보를 받는 과정에서 구독 관계를 취소하면 Observer는 구독 관계가 취소되기 전에 Observable가 보낸 데이터만 받을 수 있고, 구독 관계가 취소된 후에 Observable가 보낸 데이터는 Observer가 다시 받지 않습니다.다음 코드를 실행하면 Observable에서 다섯 번째 데이터를 받을 때 구독 관계를 취소합니다.
demo8.jpg
콘솔 로그는 다음과 같습니다.
 I/System.out:  0
 I/System.out:  0
 I/System.out:  1
 I/System.out:  1
 I/System.out:  2
 I/System.out:  2
 I/System.out:  3
 I/System.out:  3
 I/System.out:  4
 I/System.out:  4
 I/System.out:  5
 I/System.out:  5
 I/System.out:  6
 I/System.out:  7
 I/System.out:  8
 I/System.out:  9

구독 관계를 취소하기 전에 Observable에서 데이터를 보내고 Observe에서 데이터를 받습니다. 구독 관계를 취소하면 Observe에서 보내는 데이터를 받지 않습니다.

좋은 웹페이지 즐겨찾기