일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자취필수템
- 북한살둘레길
- 좌식테이블
- 아비투스
- 브런치작가되기
- 목적 중심 리더십
- 캐치마인드
- 목적중심리더십
- T자형인재
- 슬기로운 온라인 게임
- 면접
- 프래그먼트
- 테트리스
- 커스텀린트
- 베드테이블
- 한달독서
- 베드트레이
- 재택근무
- 어떻게 나답게 살 것인가
- 함수형 프로그래밍
- 끝말잇기
- 리얼하다
- 소프시스
- 지지않는다는말
- 한달브런치북만들기
- 안드로이드
- 소프시스 밤부 좌식 엑슬 테이블
- 1일1커밋
- 한달어스
- 한단어의힘
- Today
- Total
정상에서 IT를 외치다
[리엑티브 연습] AsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject 본문
[리엑티브 연습] AsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject
Black-Jin 2019. 6. 25. 16:06안녕하세요. 블랙진입니다.
리엑티브 연습 포스팅 입니다.
AsyncSubject
onComplete() 호출 되기 직전의 아이템만을 받습니다. 즉 마지막 데이터만 받아옵니다.
val asyncSubject = AsyncSubject.create<String>().apply {
onNext("0")
subscribe { data -> println("Subscriber #1 -> $data") }
onNext("1")
onNext("2")
subscribe { data -> println("Subscriber #2 -> $data") }
onNext("3")
onNext("4")
}
asyncSubject.onComplete()
결과
Subscriber #1 -> 4
Subscriber #2 -> 4
BehaviorSubject
가장 최근에 발행된 아이템으로 구독을 시작합니다. 또한 초기값을 설정 할 수 있습니다.
val behaviorSubject = BehaviorSubject.createDefault("BlackJin").apply {
//onNext("0")
subscribe { data -> println("Subscriber #1 -> $data") }
onNext("1")
subscribe { data -> println("Subscriber #2 -> $data") }
onNext("2")
}
결과
Subscriber #1 -> BlackJin
Subscriber #1 -> 1
Subscriber #2 -> 1
Subscriber #1 -> 2
Subscriber #2 -> 2
publishSubject
구독 시점 이후부터 발행된 아이템을 받는다.
val publishSubject = PublishSubject.create<String>().apply {
onNext("0")
subscribe { data -> println("Subscriber #1 -> $data") }
onNext("1")
subscribe { data -> println("Subscriber #2 -> $data") }
onNext("2")
}
결과
Subscriber #1 -> 1
Subscriber #1 -> 2
Subscriber #2 -> 2
활용법
구독한 이후 부터 데이터가 필요한 이벤트 버스로 활용할 수 있다.
object RxEventBusHelper {
/**
* Test Count
*/
val testCountBus = PublishSubject.create<Int>()
fun sendTestCount(testCnt: Int) {
testCountBus.onNext(testCnt)
}
}
disposable +=
RxEventBusHelper.testCountBus
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if (it > 0) {
...
} else {
...
}
}) {
Dlog.e("testCountBus ${it.message}")
}
ReplaySubject
구독 이전의 모든 아이템들을 반환합니다.
val replaySubject = ReplaySubject.create<String>().apply {
onNext("0")
subscribe { data -> println("Subscriber #1 -> $data") }
onNext("1")
subscribe { data -> println("Subscriber #2 -> $data") }
onNext("2")
}
결과
Subscriber #1 -> 0
Subscriber #1 -> 1
Subscriber #2 -> 0
Subscriber #2 -> 1
Subscriber #1 -> 2
Subscriber #2 -> 2
'안드로이드' 카테고리의 다른 글
[리엑티브 연습] concat, zip (네트워크 통신 예제) (0) | 2019.06.26 |
---|---|
[리엑티브 연습] flatMap, concatMap, switchMap (1) | 2019.06.25 |
[리엑티브 연습] Observable, Single, Maybe, Completable (0) | 2019.06.25 |
[스트림 연습] Kotlin Collection Example (0) | 2019.06.25 |
[리엑티브 연습] merage, debounce (로그인 예제) (0) | 2019.06.24 |