ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 안드로이드 Rxjava 사용하기 (1)
    안드로이드 학습/Android 기술면접 대비 코드 2024. 3. 6. 14:34

    설명 :

    1. [안드로이드 RxJava] 1. Rxjava, RxAndroid란?

    2. [안드로이드 RxJava] 2. Observable 클래스

     

    Rxjava가 뭔지는 학습하기는 했지만 개념 이해로는 어떻게 사용하는지 잘 모르겠어서 직접 만들어 보면서 공부해보기로 했다. 

     

    기본적으로는

    (1) Observer로 Observable에서 발행할 데이터를 어떻게 처리 해줄지 지정.

    (2) Observable로 무슨 데이터를 발행하고 발행 이후 어떤 것을 할지 지정

    (3) Observable로 Observer 구독

     

    이정도의 과정이 있지 않을까 싶다.  

     

    build.gradle (app)

    implementation("io.reactivex.rxjava3:rxandroid:3.0.2")
    implementation("io.reactivex.rxjava3:rxjava:3.1.5")
    implementation("io.reactivex.rxjava3:rxkotlin:3.0.0")

     

    kotlin을 사용한다면 rxkotlin까지 추가 해준다. 

     

    1. Observer 생성

    val observer = object : Observer<String> {
        override fun onSubscribe(d: Disposable) {
            disposable = d
        }
    
        override fun onNext(s: String) {
            _rxLiveData1.postValue(s)
        }
    
        override fun onError(e: Throwable) {
            Log.d("error", e.toString())
        }
    
        override fun onComplete() {
            _rxLiveData1.postValue("Timer is finished. Thank you")
            disposable?.dispose()
        }
    }
    •  
    • onNext() : 하나씩 순차적으로 데이터를 발행.
    • onComplete() : 데이터 발행이 끝났음을 알리는 완료 이벤트를 Observer에 전달.
    • onError() : 오류가 발생했음을 Observer에 전달

     

    2. Observable

    val observable = Observable.create { emitter ->
        val messages = listOf("5", "4", "3", "2", "1")
        for (message in messages) {
            if (!emitter.isDisposed) {
                Thread.sleep(1000) // 1초 지연
                emitter.onNext(message)
            }
        }
        emitter.onComplete()
    }

     

    • Observable.create를 사용하여 직접 Observable을 생성합니다.
    • 1초 간격으로 5~1까지 데이터를 방출한다. 
    • emitter.onComplete(): 모든 메시지를 방출한 후 스트림을 완료합니다.

     

    observable
        .subscribeOn(Schedulers.io())        // Observable이 동작을 시작할 스레드"를 지정한다.
        .observeOn(Schedulers.computation()) // Computation 스케줄러를 사용하여 데이터 처리
        .subscribe(observer)
    • Scheduler로 스레드 지정
    • Subscribe로 Observer 구독

    LiveData

    private val _rxLiveData1 = MutableLiveData<String>()
    val rxLiveData1: LiveData<String> get() = _rxLiveData1

     

    주제와는 벗어나기 때문에 깊게 적지는 않겠지만 LiveData와 DataBinding을 함께 사용해서 onNext로 5~1초 까지 Count 후 onComplete 호출

     

     

     

     

    4. Single class를  활용

    private fun example4(){
        val source: Observable<String> = Observable.just("Hello Single")
        Single.fromObservable(source)
            .subscribe { o ->
                testTextView4?.text = o
            }
            .dispose()
    }

     

    스크린샷 :

     

     

    위에서는 4가지 조합으로만 기초적인 수준으로 알아봤지만

    Observable class 종류와

    그것들이 가지고 있는 함수가 조합을 다 써본다면

    너무 많은 사용 방법이 있을 것같다. 

     

    그래서 직접 사용해가면서 알아봐야 할 듯 싶다. 

    RxJava 버전 팩토리 함수
    버전 1의 기본 팩토리 함수 create( ), just( ), from( )
    버전 2의 추가 팩토리 함수 fromArray( ), fromIterable( ), fromCallable( ), fromFuture( )
    기타 팩토리 함수 interval( ), range( ), timer( ), defer( )

     

     

Designed by Tistory.