SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler offline
PublishSubject
GDG Korea Android RxJava 스터디
dalinuam@gmail.com
Leonardo YongUk Kim
Subject<T, R>
• Observable<R>을 상속받음.
• Observer<T>를 구현.
• 추상 클래스
• hasObservers - 서브스크라이브 되는 여부
• toSerialized - SerializedSubject로 래핑해서
여러 스레드에서 OnXXX를 호출해도 안전.
dalinaum@gmail.com
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);
}
});
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) {
...
}
}
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) {
...
}
}
dalinaum@gmail.com
RxJavaHooks.onObservableStart(this, onSubscribe).call(subscriber);
- onObservableStart를 호출하고 OnSubscribe 객체를 (패러미터) 호출.

return RxJavaHooks.onObservableReturn(subscriber);

- onObservableReturn을 호출하고 Subscription 객체를 (파라미터) 반환.
Subscribe<T>
• Observer<T>와 Subscription을 구현.

• Observer<T>:

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

• Subscription:

unsubscribe와 isUnsubscribed를 가진

인터페이스.
dalinaum@gmail.com
SerializedSubject<T, R>
• actual: Subject를 저장.
• observer: Subject를 SerializedObserver로
래핑.
• 메서드들은 actual이나 observer을 통해 호출.
dalinaum@gmail.com
SerializedObserver
• 여러 스레드에서 onCompleted, onError,
onNext를 호출할 수 있게 도와주는 래퍼.
• 내부에 리스틀 두어 쌓아두는 형태.
• 리스트를 추가하거나 가져올 때
synchronized(this) 블록을 사용.
dalinaum@gmail.com
PublishSubject<T>
• SubjectSubscriptionManager<T>를 이용함.
• 상태 관리
• Subject 구현에 필요한 OnSubcribe 로직 제
공 (call 메서드를 통해)
• subscribe를 SubjectObserver로 포장하여
subscribers에 등록.
• unsubscribe에 필요한 로직을 등록.
• onStart, onAdded, onTerminated등 호출.
• SubjectObserver를 내포 클래스로 가짐.
dalinaum@gmail.com
SubjectObserver
• 서브스크라이브에 onNext, onError,
onCompleted 전달.
• emitFirst, emitNext 등의 메서드 제공.
• 단일 큐에 onNext, onError, onCompleted를
emit하기 위한 유틸리티 NotificationLite<T>
• 열거를 위한 Object 인스턴스
ON_COMPLETED_SENTINEL,
ON_NEXT_NULL_SENTINEL
• 에러를 위한 래퍼 OnErrorSentinel
dalinaum@gmail.com
PublishSubject<T>
• onNext는
SubjectSubscriptionManager(state)를 통해
SubjectObserver를 거쳐 onNext를 호출.
• onCompleted와 onError는 state가 참인 경
우만 emitNext를 통해 호출.
dalinaum@gmail.com
Questions?
Leonardo YongUk Kim
dalinaum@gmail.com
lk@realm.io

Mais conteúdo relacionado

Mais de Leonardo YongUk Kim (20)

Anatomy of Realm
Anatomy of RealmAnatomy of Realm
Anatomy of Realm
 
Tensorflow 101
Tensorflow 101Tensorflow 101
Tensorflow 101
 
Realm과 RxJava
Realm과 RxJavaRealm과 RxJava
Realm과 RxJava
 
A brief introduction to Realm with Kotlin
A brief introduction to Realm with KotlinA brief introduction to Realm with Kotlin
A brief introduction to Realm with Kotlin
 
Realm Java
Realm JavaRealm Java
Realm Java
 
역시 Redux
역시 Redux역시 Redux
역시 Redux
 
3D Graphics 101
3D Graphics 1013D Graphics 101
3D Graphics 101
 
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
 
Realm: 초고속 데이터베이스
Realm: 초고속 데이터베이스Realm: 초고속 데이터베이스
Realm: 초고속 데이터베이스
 
React Everywhere
React EverywhereReact Everywhere
React Everywhere
 
React Redux React Native
React Redux React NativeReact Redux React Native
React Redux React Native
 
Veni, Vide, Built: Android Gradle Plugin
Veni, Vide, Built: Android Gradle PluginVeni, Vide, Built: Android Gradle Plugin
Veni, Vide, Built: Android Gradle Plugin
 
A brief guide to android gradle
A brief guide to android gradleA brief guide to android gradle
A brief guide to android gradle
 
Modern android
Modern androidModern android
Modern android
 
Butter android views
Butter android viewsButter android views
Butter android views
 
Actionbar and fragment
Actionbar and fragmentActionbar and fragment
Actionbar and fragment
 
좋은 뷰, 나쁜 뷰, 이상한 뷰
좋은 뷰, 나쁜 뷰, 이상한 뷰좋은 뷰, 나쁜 뷰, 이상한 뷰
좋은 뷰, 나쁜 뷰, 이상한 뷰
 
Anatomy of an android
Anatomy of an androidAnatomy of an android
Anatomy of an android
 
The Git - (#1/2)
The Git - (#1/2)The Git - (#1/2)
The Git - (#1/2)
 
The git
The gitThe git
The git
 

Último

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 

Último (6)

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 

PublishSubject