
안녕하세요
이번 시간에는 Disposable에 대해 알아보겠습니다
RxJava #2에서 onComplete()를 통해 데이터 발행이 끝났음을 알렸습니다.
Disposable도 비슷한 역할을 합니다.
데이터 발행을 언제 까지 할 건지 알고 있는 상황에서는 onComplete()를 이용하면 됩니다.
하지만 무한하게 아이템을 발행하거나 오랫동안 실행되는 Observable의 경우에는 사용자의 액션 또는 안드로이드 컴포넌트 생명주기와 관련해서 이미 활성화되었다면 구독이 더는 필요하지 않을 수 있다. 이럴 때는 메모리 누수 방지를 위해 명시적인 폐기 dispose가 필요하다.
disposable.dispose();
메서드를 호출하면 언제든지 아이템 발행을 중단할 수 있다.
https://adc6981.tistory.com/17
안드로이드 RxJava #3 Cold Observable, Hot Observable
안녕하세요 이번 시간에는 Cold Observable과 Hot Observable에 대해 알아보겠습니다. Observable을 구현하는 방식에는 2가지가 있습니다. 미묘한 차이지만 전혀 다른 결과를 보여줍니다. Cold Observable과 Hot O
adc6981.tistory.com
이전 시간에 만들었던 Cold Observable을 조금 변경해 보자.
Observable src = Observable.interval(1, TimeUnit.SECONDS);
Disposable disposable = src.subscribe(value -> Log.e("첫 번째 구독",value.toString()));
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
src.subscribe(value -> Log.e("두 번째 구독",value.toString()));
disposable.dispose();
2022-11-04 15:23:30.359 28775-28811/com.psw.rxtest2 E/첫 번째: 0
2022-11-04 15:23:31.358 28775-28811/com.psw.rxtest2 E/첫 번째: 1
2022-11-04 15:23:32.359 28775-28811/com.psw.rxtest2 E/첫 번째: 2
2022-11-04 15:23:33.361 28775-28812/com.psw.rxtest2 E/두 번째: 0
2022-11-04 15:23:34.360 28775-28812/com.psw.rxtest2 E/두 번째: 1
2022-11-04 15:23:35.360 28775-28812/com.psw.rxtest2 E/두 번째: 2
2022-11-04 15:23:36.361 28775-28812/com.psw.rxtest2 E/두 번째: 3
2022-11-04 15:23:37.360 28775-28812/com.psw.rxtest2 E/두 번째: 4
2022-11-04 15:23:38.361 28775-28812/com.psw.rxtest2 E/두 번째: 5
이러한 결과를 볼 수 있다.
1초에 한번씩 아이템을 발행하다가 sleep(3000) 이후 두 번째 구독이 실행되고, 첫 번째 아이템 발행이 종료되면서 출력이 멈춘 것을 확인할 수 있다.
CompositeDisposable
CompositeDisposable를 통해서 여러개의 Disposable을 처리할 수 있다.
Observable src = Observable.interval(1, TimeUnit.SECONDS);
Disposable disposable1 = src.subscribe(value -> Log.e("첫 번째",value.toString()));
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Disposable disposable2 =src.subscribe(value -> Log.e("두 번째",value.toString()));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
CompositeDisposable cd = new CompositeDisposable();
cd.add(disposable1);
cd.add(disposable2);
cd.dispose();
2022-11-04 15:30:37.903 29284-29321/com.psw.rxtest2 E/첫 번째: 0
2022-11-04 15:30:38.905 29284-29321/com.psw.rxtest2 E/첫 번째: 1
2022-11-04 15:30:39.904 29284-29321/com.psw.rxtest2 E/첫 번째: 2
2022-11-04 15:30:40.904 29284-29321/com.psw.rxtest2 E/첫 번째: 3
2022-11-04 15:30:40.906 29284-29322/com.psw.rxtest2 E/두 번째: 0
마지막 sleep(1000)을 통해서 1초 이후 CompositeDisposable를 이용해서 아이템 발행을 중단 한것이다.
여러 개를 add 하기 귀찮다면
cd.addAll(disposable1,disposable2);
이렇게 한 번에 처리하는 방법도 있다.
다음 시간에는 마블 다이어그램 보는 방법과 RxJava의 연산자에 대해 알아보겠습니다.
수고하셨습니다!
'안드로이드' 카테고리의 다른 글
안드로이드 RxJava #6 RxJava 연산자-(변형) (0) | 2022.11.08 |
---|---|
안드로이드 RxJava #5 마블 다이어그램, RxJava 연산자-(생성) (0) | 2022.11.07 |
안드로이드 RxJava #3 Cold Observable, Hot Observable (0) | 2022.11.03 |
안드로이드 RxJava #2 Observable (0) | 2022.11.01 |
안드로이드 RxJava #1 기초 내용 (PublishSubject) (0) | 2022.10.18 |