본문 바로가기

카테고리 없음

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

반응형

안드로이드 개발 시, 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() 을 통해서 동기처리가 완료 된다

반응형