RxJava를 사용해보자
순서는 4단계로 이루어진다.
1. Observable 생성
2. Observable에 연산자 적용
3. 작업을 수행할 Thread와 결과를 생성할 Thread를 지정
4. Observer를 Observable에 등록 후 결과를 확인
단일 객체와 리스트 객체를 Observable로 생성하는 코드를 비교해보자.
예제 코드를 올리겠다.
Observable의 데이터 형태이다.
우리는 이 Task라는 class의 Object를 생성하여 Observable하게 만들고 Observer가 관찰하게 할 것이다.
class Task(description : String, isComplete : Boolean, priority : Int)
{
var description = description
var isComplete = isComplete
var priority = priority
}
MVVM에서 Model 역할을 하는 class이다.
다른 예로 들자면 DB에서 Data를 가져오는 역할과 비슷하다.
class DataSource
{
//Task 생성
fun createTasksList() : List<Task>
{
var tasks = ArrayList<Task>()
tasks.add(Task("Task out the trash",true,3))
tasks.add(Task("Walk the dog",false,2))
tasks.add(Task("Make my bed",true,1))
tasks.add(Task("Upload the dishwasher",false,0))
tasks.add(Task("Make dinner",true,5))
return tasks
}
}
MainActivity내의 코드이다.
val taskObservable = Observable // create a new Observable object
.fromIterable<Task>(DataSource().createTasksList()) // apply 'fromIterable' operator
.subscribeOn(Schedulers.io()) // designate worker thread (background)
.observeOn(AndroidSchedulers.mainThread()) // designate observer thread (main thread)
taskObservable.subscribe(object : Observer<Task?> {
override fun onComplete() {
Log.d(TAG, "omComplete : called.")
}
override fun onSubscribe(d: Disposable) {
Log.d(TAG, "onSubscribe : called.")
disposable.add(d)
}
override fun onNext(t: Task) {
Log.d(TAG, "onNext : " + Thread.currentThread().name)
Log.d(TAG, "onNext : " + t.description)
//Thread.sleep(1000)
}
override fun onError(e: Throwable) {
Log.e(TAG, "onError : ", e)
}
})
taskObservable이라는 Observable 객체를 생성한다.
.fromIterable() -> 이전 class에서 가져온 Data를 넣어 순서대로 돌린다.
.subscribeOn() -> 데이터를 Background에서 뿌린다(?)
.observeOn() -> 데이터를 Main Thread에서 관찰한다.
.subscribe() -> 넘어오는 Data를 관찰할 때마다 각각의 Method가 수행된다.
처음 관찰이 진행될 때 onSubscribe()
위에서 발행된(뿌려진) Data를 하나씩 가져올 때마다 onNext()
모든 Data를 가져왔거나 Complete가 불렸을 때 onComplete()
'Android' 카테고리의 다른 글
Disposable이란? (RxAndroid - 4) (0) | 2020.01.13 |
---|---|
Flowable이란? (RxAndroid - 3) (0) | 2020.01.13 |
RxJava2 / RxAndroid2 / Reactive 란? (RxAndroid-1) (0) | 2020.01.13 |
Rxjava2 , RxAndroid 를 알아보자 (0) | 2020.01.07 |
Android Design Pattern 중 MVVM를 사용해보자(Kotlin) (0) | 2019.12.31 |