[출처 - RxJava 프로그래밍 : 리액티브 프로그래밍 기초부터 안드로이드 까지 한번에]
본 글은 'RxJava 프로그래밍 : 리액티브 프로그래밍 기초부터 안드로이드 까지 한번에' 를 학습하면서 정리한 글입니다
RxAndroid란? 지금까지 공부한 ReactiveX 관련 기능을 Android App에서 쉽고 간견하게 사용할 수 있는 라이브러리를 말합니다.
그럼 왜 RxAndroid를 사용해야 할까요?
지금까지 Android 개발에서 제일 큰 어려움은 아마 thread 사용에 있을 것입니다.
1. 안ㄴ드로이드 비동기 처리 및 에러 핸들링.
2. 수많은 핸들러와 콜백 때문에 발생하는 디버깅 문제
3. 2개의 비동기 처리 후 결과 합성
4. 이벤트 중복 실행
등 이외에도 다양한 어려움이 있었을 것입니다.
하지만 RxAndroid 사용함으로서 다음과 같은 장점을 얻을 수 있습니다.
1. 간단한 코드로 복잡한 병행 프로그래밍을 할 수 있습니다.
2. 비동기 구조에서 에러를 다루기 쉽습니다.
3. 함수형 프로그래밍 기법도 부분적으로 적용할 수 있습니다.
이런 RxAndroid의 API는 여기서 확인 하실 수 있습니다.
간단하게
RxLifecycle은 RxJava를 사용하는 안드로이드 앱용 라이프 사이클 처리 API
RxBinding은 안드로이드 UI 위젯용 RxJava 바인딩 API
RxPermissions는 RxJava에서 제공하는 안드로이드 런타임 권한 라이브러리 입니다.
이 외에도 다양한 api가 존재하니 꼭 API를 확인하면 좋을것 같습니다.
그럼 Android Studio에서 어떻게 RxAndroid를 사용하는지 확인해 보겠습니다.
프로젝트를 생성 후 build.gradle에 다음을 추가합니다.(Project gradle이 아닌 Moudle:app gradle에 추가합니다.)
//RxAndroid와 RxJava , RxKotlin 추가
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.17'
implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'
// 필요한 API를 찾아서 추가 합니다.
implementation 'com.jakewharton.rxbinding3:rxbinding:3.1.0'
implementation 'com.uniquext.android:rxlifecycle:2.0.0'
그리고 activity_main.xml을
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/main_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
하고
MainActivity.kt를
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import io.reactivex.Observable
import io.reactivex.observers.DisposableObserver
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val source = Observable.create<String> { it->
it.onNext("Hello RxAndroid World")
it.onComplete()
}
source.subscribe(observer)
}
var observer = object:DisposableObserver<String>(){
override fun onComplete() {
Log.d("TEST","observer onComplete")
}
override fun onNext(t: String) {
main_text.text = t
}
override fun onError(e: Throwable) {
}
}
}
이렇게 작성하면 다음과 같은 결과를 볼 수 있습니다.
위와 다르게
val source = Observable.just("Hello RxAndroid world")
source.subscribe(observer)
이렇게 해도 동일한 결과를 볼 수 있지만, 단 observer의 onNext만 동작하고 onComplete는 동작하지 않습니다.
'2023년 이전 > ReativeX' 카테고리의 다른 글
RxAndroid - 안드로이드 스레드 대체(AsyncTask) (0) | 2020.02.17 |
---|---|
RxAndroid - RecyclerView (0) | 2020.02.14 |
RxJava, RxKotlin - 스케줄러를 활용하여 콜백 지옥 벗어나기 (0) | 2020.02.10 |
RxJava, RxKotlin - 스케줄러(3) (0) | 2020.01.28 |
RxJava,RxKoltin - 스케줄러(2) (0) | 2020.01.27 |