[Android] RxJava의 시작 단계 사용 자습서

9598 단어
전언
최근에는 RxJava라는 글자를 자주 보았고, 블로그에서 RxJava를 추천하는 사람도 많았다.궁금한 걸 어떻게 놓칠 수 있을까 해서 Google은 RxJava가 좋다는 말과 RxJava가 어렵다는 말이 다 있다고 말하고 직접 시도해 보았습니다.블로그를 써서 공부하는 과정을 기록하는 것은 한편으로는 공고한 것으로 하고, 다른 한편으로는 초보자에게 도움을 주기를 바란다.(첫 편에서는 RxJava의 기본적인 용법만 소개했을 뿐 RxJava의 장점을 아직 알 수 없다. 서두르지 마라. 천천히 깊이 들어가면 RxJava가 가져다 주는 편리함을 느낄 수 있다.)
참조: Android 개발자에 대한 RxJava 상세 정보(본 문서의 일부 내용은 이 블로그에서 참조됨)
소개하다.
GitHub 홈 페이지에 소개된 내용:
a library for composing asynchronous and event-based programs using observable sequences for the Java VM
번역하면 다음과 같다.
Java VM에서 관측 가능한 시퀀스를 사용하여 비동기적이고 이벤트 기반 프로그램을 구성하는 라이브러리
초보자들에게 이것은 너무 추상적이다. 우리는 더욱 구체적인 해석을 보아야 한다. 간단하게 말하면 이것은 비동기적인 조작을 실현하는 라이브러리이다.(아니면 몰라? 코드를 보는 게 더 확실해)
장점
RxJava의 장점은 바로 그의 간결성에 있다. 논리가 간단할 때 RxJava의 장점을 볼 수 없다. 스케줄링 과정이 비교적 복잡한 상황에서 비동기 코드는 쓰기도 어렵고 읽기도 어렵다는 것을 모두가 알고 있을 것이다.이때 RxJava의 장점이 생겼다. 프로그램 논리가 점점 복잡해지면서 RxJava는 여전히 간결함을 유지할 수 있다.
관찰자 모드
먼저 관찰자 모델을 소개해야 한다(비유가 적절하지 않을 수도 있고 뜻이 닿으면 된다).
관찰자: 피관찰자의 행위를 감시하고 피관찰자의 어떤 상태가 바뀔 때 관찰자에게 알리고 관찰자는 대응하는 조작을 한다.
피관찰자: 감시된 대상은 어떤 상태가 바뀔 때 관찰자에게 통지한다.
구독(또는 등록): 관찰자와 피관찰자를 연결한다.지저분하다? 밤?
여기서 자주 사용하는 예를 들어 Button을 누르면 On Click Listener의 onClick () 이벤트를 터치합니다.이 사건에서 그들의 역할은 각각 다음과 같다.
관찰자: OnClickListener;
피관찰자: Button;
가입(또는 등록): setOnClickListener().
RxJava
위에서 관찰자 모드를 소개했는데 여기서도 RxJava의 세 캐릭터를 캐릭터 분배를 진행하겠습니다.
관찰자: Observer;
관찰자: Observable;
구독(또는 등록):subscribe().
관찰자 Observer는 이벤트가 트리거될 때 어떤 행동을 할지 결정하는 관찰자입니다.RxJava 관찰자의 이벤트 리셋 방법은 일반 이벤트 onNext () (onClick ()/onEvent () 와 같은 두 가지 특수한 이벤트를 정의합니다: onCompleted () 와 onError ().
onCompleted(): 이벤트 대기열이 완료되었습니다.RxJava는 모든 사건을 단독으로 처리할 뿐만 아니라, 그것들을 하나의 대기열로 간주한다.RxJava는 새로운 onNext () 가 더 이상 발송되지 않을 때, onCompleted () 방법을 터치해서 표시해야 한다고 규정하고 있다.
onError(): 이벤트 대기열 예외입니다.이벤트 처리 중 이상이 발생하면 onError () 가 터치되고 대기열이 자동으로 종료되며 더 이상 이벤트가 발생하지 않습니다.
올바르게 실행되는 이벤트 시퀀스 중, onCompleted () 와 onError () 는 하나이며, 이벤트 시퀀스 중 마지막입니다.주의해야 할 것은 onCompleted () 와 onError () 양자도 서로 배척된다. 즉, 대기열에서 하나를 호출하면 다른 것을 호출하지 말아야 한다.

피관찰자 Observable은 피관찰자로서 언제 사건을 촉발할 것인지, 어떤 사건을 촉발할 것인지를 결정한다.create(), just(T...),from(T[]) 또는 from(Iterable extends T>)을 사용하여 Observable을 만들고 이벤트 트리거 규칙을 정의합니다.
구독이 Observable와 Observer를 만든 후 subscribe () 방법으로 연결합니다 코드를 직접 보십시오. 여기는 RxJava의 기본적인 용법만 보여 주었을 뿐 RxJava의 장점을 잠시 볼 수 없습니다.
사용
예: 프린터 개 문자열에 의존 추가
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
        //       
        Observer observer = new Observer() {

            @Override
            public void onCompleted() {
                Log.i(TAG, "Completed");
            }

            @Override
            public void onError(Throwable e) {
                Log.i(TAG, "Error");
            }

            @Override
            public void onNext(String s) {
                Log.i(TAG, s);
            }
        };
        //  Observable.create()      
        Observable observable1 = Observable.create(new Observable.OnSubscribe() {
            @Override
            public void call(Subscriber super String> subscriber) {
                subscriber.onNext("Hello");
                subscriber.onNext("Wrold");
                subscriber.onCompleted();
            }
        });
        //  
        observable1.subscribe(observer);

이상에서 사용한 것은 모두 rx가방 안에 있는 것이니 잘못 쓰지 마세요!!!
Observer
위에서 Rxjava의 기본적인 사용을 한 번 완성하였다.
확장성
Subscriber는 Observer 인터페이스를 제외하고 Rxjava는 Observer의 추상화를 실현한 Subscriber를 내장했다.Subscriber는 Observer 인터페이스를 확장했지만 그들의 기본적인 사용 방식은 완전히 같다.
Subscriber subscriber = new Subscriber() {
  @Override
  public void onNext(String s) {
      Log.d(tag, "Item: " + s);
  }

  @Override
  public void onCompleted() {
      Log.d(tag, "Completed!");
  }

  @Override
  public void onError(Throwable e) {
      Log.d(tag, "Error!");
  }
};
기본적인 사용 방식이 같을 뿐만 아니라 실질적으로 Rxjava의subscribe 과정에서 Observer도 항상Subscriber로 전환되어 사용된다.그림 참조:
Rxjava 소스
따라서 만약 기본 기능만 사용하고 싶다면, Observer와Subscriber를 선택하는 것은 완전히 같다.이러한 차이점은 사용자에게 크게 두 가지가 있습니다.
onStart(): Subscriber를 추가하는 방법입니다.이것은subscribe가 시작되기 전에 호출되며, 예를 들어 데이터의 삭제나 리셋을 준비하는 데 사용할 수 있습니다.이것은 선택할 수 있는 방법으로 기본적으로 실행이 비어 있습니다.주의해야 할 것은 준비 작업의 라인에 대한 요구가 있으면 (예를 들어 진도를 표시하는 대화상자를 팝업하면 주 라인에서 실행해야 함) 온스타트 () 는 적용되지 않습니다. 왜냐하면 온스타트 () 는subscribe에서 발생하는 라인에서 항상 호출되기 때문에 라인을 지정할 수 없습니다.지정된 스레드에서 준비 작업을 하려면 DoOnSubscribe() 방법을 사용해 구체적으로 뒷글에서 볼 수 있다.
unsubscribe(): 구독 해지를 위한 Subscriber의 또 다른 인터페이스인 Subscription 방법입니다.이 메서드가 호출되면 Subscriber는 더 이상 이벤트를 받지 않습니다.일반적으로 이 방법이 호출되기 전에 isUnsubscribed()를 사용하여 먼저 상태를 판단할 수 있다.subscribe () 는 subscribe () 이후에 Observable가 Subscriber 인용을 가지고 있기 때문에 이 인용이 제때에 풀리지 않으면 메모리 유출 위험이 있습니다.따라서 더 이상 사용하지 않을 때 가능한 한 빨리 적당한 곳(예를 들어 onPause () onStop () 등 방법에서) unsubscribe () 를 호출하여 인용 관계를 해제함으로써 메모리 유출이 발생하지 않도록 하는 원칙을 유지하는 것이 좋다.

Observable Observable의 다른 몇 가지 생성 방법은 Observable가 이전에Create () 를 사용하여 만든 Observable:1과 같고 Observable를 사용합니다.just () 피관찰자 만들기
Observable observable2 = Observable.just("Hello", "World");
2, Observable 사용하기.from() 피관찰자
String [] words = {"Hello", "World"};
Observable observable3 = Observable.from(words);
또는
List list = new ArrayList();
list.add("Hellow");
list.add("Wrold");
Observable observable4 = Observable.from(list);
만들기
소결
현재 RxJava의 어떤 장점도 보지 못했고 코드가 더 많은 것 같아요. (서두르지 마세요. 첫 편이기 때문에 저는 그들 사이의 관계와 가장 기초적인 용법만 소개했어요. 다음 몇 편은 RxJava의 다른 기능, 그리고 복잡한 끼워넣기 관계의 이치를 소개할 거예요. 그때 RxJava의 강점을 알게 될 거예요)
더 많은 것: 안드로이드 RxJava의 사용 (2) Action Android RxJava의 사용 (3) 변환 (map,flatMap) 안드로이드 RxJava의 사용 (4) 스레드 제어 - Scheduler
이상 잘못된 점이 있으면 지적해 주셔서 감사합니다

좋은 웹페이지 즐겨찾기