카테고리 없음

안드로이드에서 코루틴을 사용할 때, 파이어베이스 동기 처리 (using android coroutine, and firebase async processing)

반상현 2020. 5. 11. 19:31
반응형

안드로이드 개발 시, Kotlin 쓰는 경우 코루틴은 상당히 쓸만한데, 

A,B,C 함수가 끝나면 D를 실행하라

A ->B ->C ->D 순차적으로 실행하라

통신 완료 후 동작을 실행하라

 

등등의 코드가 필요할 때 아주 쓸만하다 

(rxjava를 써봤으면 그와 유사한 부분이 꽤 있는듯)

 

하지만 firebase db, firestore db는 실시간 갱신 처리가 되도록 만들어졌기 때문인지 listener의 return이 오기 전에 코루틴 함수가 pass되는 현상이 있어서 체크 해봤는데 

 

결론적으로는 gradle에 corountine android 하단에, kotlinx-coroutines-play-services 를 추가해주고

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.3.3'

 

CoroutineScope(Dispatchers.IO).launch {
            runBlocking {
                funXXX()
            }
            funAfterXXX()
        }
suspend fun funXXX():Boolean{
        return try {
            db.collection("xxxx").document("yyyy")
                .get().await()
            true
        }catch (e:FirebaseException){
            Log.e("error:","erroe:"+e.message.toString())
            false
        }
    }

extension funciton .await() 을 통해서 동기처리가 완료 된다

반응형