Notice
Recent Posts
Recent Comments
Link
투케이2K
365. (java/자바) [RxJava] Observable create subscribe 구독 시 AndroidSchedulers.mainThread() 메인 스레드 실행 추가 본문
Java
365. (java/자바) [RxJava] Observable create subscribe 구독 시 AndroidSchedulers.mainThread() 메인 스레드 실행 추가
투케이2K 2026. 2. 12. 20:24728x90
반응형
[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java

[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 구분 : RxJava / 간단 소스 / 메인 스레드 처리
- 사전) RxJava 설명 :
>> Rx (ReactiveX) :
- ReactiveX 는 관찰가능한 절차를 통해 비동기, 이벤트 기반 프로그램을 구성하기 위한 라이브러리 입니다
- ReactiveX 는 Observer Pattern 옵저버 패턴 을 확장하며, Sequence 를 조합할 수 있는 연산자를 지원합니다
- ReactiveX 는 low-level Thread, 동기화, Thread 안전성, non-blocking I/O 에 관한 우려를 줄입니다
>> RxJava (Reactive java) :
- Reactive Programming 패러다임을 자바에서 구현한 프로그래밍 라이브러리 입니다
- RxJava 는 함수형 프로그래밍 방식을 도입했으며, Side Effect 가 없는 순수 함수를 지향하기 때문에 Thread-Safe 합니다
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// -----------------------------------------------
// [사전 코드 필요 설명 정리]
// -----------------------------------------------
// create() : 프로그래머가 직접 onNext, onComplete, onError를 호출해야함 (just 와의 차이점)
// Disposable isDisposed : 구독 연결 관계 확인 (true / false)
// Disposable dispose : 구독 연결 관계 끊기 (onComplete 이벤트가 정상 실행 시 별도로 호출할 필요 없음)
// -----------------------------------------------
// -----------------------------------------------
// [Observable create 사용해 생성 실시 : 생성자]
// -----------------------------------------------
// Observable<String> : String 값 onNext 반환 수행
// -----------------------------------------------
Observable<String> observable = Observable.create(subscriber -> {
try {
if (!subscriber.isDisposed()) { // ✅ [연결된 구독자가 있는 경우]
// [onNext] 데이터 알림 전달
subscriber.onNext("SUCCESS");
// [onCompleted] 완료 알림 전달
subscriber.onComplete();
}
} catch (Exception e) {
e.printStackTrace();
// ❌ [onError] 에러 알림 전달
subscriber.onError(e);
}
});
// -----------------------------------------------
// -----------------------------------------------
// [Observable 생성자 를 구독 (Subscribe) 및 데이터 소비 수행]
// -----------------------------------------------
Disposable disposable = observable
.subscribeOn(Schedulers.io()) // (선택) 데이터 생성/업스트림을 백그라운드로 수행
.observeOn(AndroidSchedulers.mainThread()) // ✅ 구독 콜백을 메인 스레드에서 실행
.subscribe(
value -> { // ✅ onNext 응답 처리
S_Log.d("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>> [Observable] : [onNext] : " + String.valueOf(value) + " >>>>>>>>>>>>>>>>>>>>");
},
error -> { // ❌ onError 응답 처리
S_Log.e("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>> [Observable] : [onError] : " + String.valueOf(error.getMessage()) + " >>>>>>>>>>>>>>>>>>>>");
},
() -> { // ✅ onCompleted 응답 처리
S_Log.w("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>> [Observable] : [onCompleted] >>>>>>>>>>>>>>>>>>>>");
}
);
// -----------------------------------------------
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[Observable] create 사용해 생성자 만들기 및 subscribe 구독 결과 메시지 확인
https://kkh0977.tistory.com/3599
https://blog.naver.com/kkh0977/222970344668?trackingCode=blog_bloghome_searchlist
[Observable] just 사용해 생성자 만들기 및 subscribe 구독 결과 메시지 확인
https://blog.naver.com/kkh0977/222970341475?trackingCode=blog_bloghome_searchlist
[Subject] AsyncSubject 사용해 onNext() 발행 된 마지막 데이터 출력 실시
https://blog.naver.com/kkh0977/222970372557?trackingCode=blog_bloghome_searchlist
[Observable] take 사용해 처음 발행하는 n개의 데이터 만 출력 실시
https://blog.naver.com/kkh0977/222970381903?trackingCode=blog_bloghome_searchlist
[Observable] take 사용해 처음 발행하는 n개의 데이터 만 출력 실시
https://blog.naver.com/kkh0977/222970381903?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
728x90
반응형
'Java' 카테고리의 다른 글
Comments
