본문 바로가기

Android 공부/rxJava 공부

RxJava 공부 4 - fromCallable

-1. 이전글


2018/12/10 - [rxJava 공부] - RxJava 공부 3 - Map과 FlatMap, Timer와 interval, FlatMap과 ConcatMap

2018/12/10 - [rxJava 공부] - RxJava 공부 2 - AsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject

2018/12/10 - [rxJava 공부] - RxJava 공부 1 - just, create, fromArray, interval, range, fromIterable, filter, map



0. 고찰


Room을 다루던 도중에, Room을 이요해서 db값을 꺼내보니까,  쓰레드를 이용해서 값을 변경하고 ui를 변경해야 했다.

그래서 쉽게 생각할 수 있는게 AsyncTask를 이용해서 doInBackground()를 이용하고, onPostExecute()를 이용하는 것이었는데,

Room은 아래로 길어지기 때문에 AsyncTask와 어울리지 않고, rx와 어울린다고 생각을 했습니다.


그렇다면 비동기 값이 난 후에 데이터를 처리해야 한다면, rx로 어떻게 해야할까...?


라는 고찰이 있었습니다.


1. 예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Observable.fromCallable {
            val checkTimeDB = Room.databaseBuilder(activity, AppDataBase::class.java, "CHECK_TIME.db").build()
            val timeLiveData = checkTimeDB.dailyTimeDao().getTodayTime(yyyyMMdd)
            var mTodayWorker = 0
            mTodayWorker = if (timeLiveData.isEmpty()) {
                0
            } else {
                timeLiveData[0].studyTime!!.toInt()
            }
            return@fromCallable mTodayWorker
        }
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({ mTodayWorker ->
                    updateTimerUI(mTodayWorker)
                }, {}, {})
cs


2. 해석


Observable.fromCallable{useRoom(); return data}.subscribeOn().observenOn().subscribe({},{},{})


이와 같은 구조로 이루어져있고, fromCallable을 통해서 비동기작업을 처리하고 난 후에, 

나온 값을 return하고 subscribe로 전달하는 구조 입니다.


3. Callable이 뭐지?


Callable은 비동기처리를 하기 위해서 사용하는 것이고, 우리는 대부분의 비동기작업은 여태까지 Runnable을 이용했습니다.

하지만 Runnable을 통해서는 값을 return 받을 수 없는 구조였고, 이것을 해결하기 위해서 Callable이 나왔다고 생각합니다.


즉, callable은 비동기작업이 일어난 경우에 해당 작업의 값을 변수로 받을 수 있게 되는 것입니다.


JavaScript에서는 흡사, Promise를 통해서 로직을 처리하는 것과 같은 느낌이 났습니다.



4. 위의 코드를 다시 해석


fromCallable을 통해서 Room을 통해서 값이 나오는 비동기 처리를 기다리게 됩니다.

그래서 값이 나오게 되면 return@fromCallable data 를 통해서 값을 return 받게 되고 해당 값을 subscribe로 이동시켜서 ui를 update시키게 됩니다.



5. 평가


Callable은 FirebaseRealbase, 각종 비동기 작업을 처리하기 때문에 꼭 알아야하는 지식이다.



개인적으로 만들고 있는 어플리케이션 입니다.


2018/10/21 - [나의 일기] - (리뷰) 시간표 어플리케이션 - 담다

2018/07/15 - [나의 일기] - #담아두다 #일상 #다이어리 #어플리케이션