Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
PublishSubject
GDG Korea Android RxJava 스터디
dalinuam@gmail.com
Leonardo YongUk Kim
Subject<T, R>
• Observable<R>을 상속받음.
• Observer<T>를 구현.
• 추상 클래스
• hasObservers - 서브스크라이브 되는 여부
• toSerialized - Serialize...
SerializedSubject<T, R>
• 생성자 - Observable.subscribe가 호출될 때
수행되는 OnSubscribe<R>를 정의.
dalinaum@gmail.com
super(new OnSubscr...
OnSubscribe.call()
• Observable의 unsafeSubscribe 호출.
dalinaum@gmail.com
public final Subscription unsafeSubscribe(Subscrib...
dalinaum@gmail.com
public final Subscription unsafeSubscribe(Subscriber<? super T> subscriber) {
try {
// new Subscriber s...
dalinaum@gmail.com
RxJavaHooks.onObservableStart(this, onSubscribe).call(subscriber);
- onObservableStart를 호출하고 OnSubscrib...
Subscribe<T>
• Observer<T>와 Subscription을 구현.

• Observer<T>:

onCompleted, onError, onNext를 가진 인터
페이스.

• Subscription:

...
SerializedSubject<T, R>
• actual: Subject를 저장.
• observer: Subject를 SerializedObserver로
래핑.
• 메서드들은 actual이나 observer을 통해 ...
SerializedObserver
• 여러 스레드에서 onCompleted, onError,
onNext를 호출할 수 있게 도와주는 래퍼.
• 내부에 리스틀 두어 쌓아두는 형태.
• 리스트를 추가하거나 가져올 때
syn...
PublishSubject<T>
• SubjectSubscriptionManager<T>를 이용함.
• 상태 관리
• Subject 구현에 필요한 OnSubcribe 로직 제
공 (call 메서드를 통해)
• subsc...
SubjectObserver
• 서브스크라이브에 onNext, onError,
onCompleted 전달.
• emitFirst, emitNext 등의 메서드 제공.
• 단일 큐에 onNext, onError, onCo...
PublishSubject<T>
• onNext는
SubjectSubscriptionManager(state)를 통해
SubjectObserver를 거쳐 onNext를 호출.
• onCompleted와 onError는 ...
Questions?
Leonardo YongUk Kim
dalinaum@gmail.com
lk@realm.io
Upcoming SlideShare
Loading in …5
×

PublishSubject

11,056 views

Published on

GDG Korea 안드로이드 RxJava 스터디 발표자료

Published in: Technology
  • Dating for everyone is here: ♥♥♥ http://bit.ly/2F90ZZC ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❤❤❤ http://bit.ly/2F90ZZC ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

PublishSubject

  1. 1. PublishSubject GDG Korea Android RxJava 스터디 dalinuam@gmail.com Leonardo YongUk Kim
  2. 2. Subject<T, R> • Observable<R>을 상속받음. • Observer<T>를 구현. • 추상 클래스 • hasObservers - 서브스크라이브 되는 여부 • toSerialized - SerializedSubject로 래핑해서 여러 스레드에서 OnXXX를 호출해도 안전. dalinaum@gmail.com
  3. 3. SerializedSubject<T, R> • 생성자 - Observable.subscribe가 호출될 때 수행되는 OnSubscribe<R>를 정의. dalinaum@gmail.com super(new OnSubscribe<R>() { @Override public void call(Subscriber<? super R> child) { actual.unsafeSubscribe(child); } });
  4. 4. OnSubscribe.call() • Observable의 unsafeSubscribe 호출. dalinaum@gmail.com public final Subscription unsafeSubscribe(Subscriber<? super T> subscriber) { try { // new Subscriber so onStart it subscriber.onStart(); // allow the hook to intercept and/or decorate RxJavaHooks.onObservableStart(this, onSubscribe).call(subscriber); return RxJavaHooks.onObservableReturn(subscriber); } catch (Throwable e) { ... } }
  5. 5. dalinaum@gmail.com public final Subscription unsafeSubscribe(Subscriber<? super T> subscriber) { try { // new Subscriber so onStart it subscriber.onStart(); // allow the hook to intercept and/or decorate RxJavaHooks.onObservableStart(this, onSubscribe).call(subscriber); return RxJavaHooks.onObservableReturn(subscriber); } catch (Throwable e) { ... } }
  6. 6. dalinaum@gmail.com RxJavaHooks.onObservableStart(this, onSubscribe).call(subscriber); - onObservableStart를 호출하고 OnSubscribe 객체를 (패러미터) 호출.
 return RxJavaHooks.onObservableReturn(subscriber);
 - onObservableReturn을 호출하고 Subscription 객체를 (파라미터) 반환.
  7. 7. Subscribe<T> • Observer<T>와 Subscription을 구현.
 • Observer<T>:
 onCompleted, onError, onNext를 가진 인터 페이스.
 • Subscription:
 unsubscribe와 isUnsubscribed를 가진
 인터페이스. dalinaum@gmail.com
  8. 8. SerializedSubject<T, R> • actual: Subject를 저장. • observer: Subject를 SerializedObserver로 래핑. • 메서드들은 actual이나 observer을 통해 호출. dalinaum@gmail.com
  9. 9. SerializedObserver • 여러 스레드에서 onCompleted, onError, onNext를 호출할 수 있게 도와주는 래퍼. • 내부에 리스틀 두어 쌓아두는 형태. • 리스트를 추가하거나 가져올 때 synchronized(this) 블록을 사용. dalinaum@gmail.com
  10. 10. PublishSubject<T> • SubjectSubscriptionManager<T>를 이용함. • 상태 관리 • Subject 구현에 필요한 OnSubcribe 로직 제 공 (call 메서드를 통해) • subscribe를 SubjectObserver로 포장하여 subscribers에 등록. • unsubscribe에 필요한 로직을 등록. • onStart, onAdded, onTerminated등 호출. • SubjectObserver를 내포 클래스로 가짐. dalinaum@gmail.com
  11. 11. SubjectObserver • 서브스크라이브에 onNext, onError, onCompleted 전달. • emitFirst, emitNext 등의 메서드 제공. • 단일 큐에 onNext, onError, onCompleted를 emit하기 위한 유틸리티 NotificationLite<T> • 열거를 위한 Object 인스턴스 ON_COMPLETED_SENTINEL, ON_NEXT_NULL_SENTINEL • 에러를 위한 래퍼 OnErrorSentinel dalinaum@gmail.com
  12. 12. PublishSubject<T> • onNext는 SubjectSubscriptionManager(state)를 통해 SubjectObserver를 거쳐 onNext를 호출. • onCompleted와 onError는 state가 참인 경 우만 emitNext를 통해 호출. dalinaum@gmail.com
  13. 13. Questions? Leonardo YongUk Kim dalinaum@gmail.com lk@realm.io

×