Android When .asLiveData() collect flow and where does
사용 언어: Kotlin 1.9.0
사용 버전: Android Studio Giraffe 2022.3.1
한 번 뜯어봅시다.
참고한 예제는 이 깃허브 프로젝트입니다.
https://github.com/android/codelab-android-datastore/blob/387043a665d401ee6a95b843e67b102de0dd2242/app/src/main/java/com/codelab/android/datastore/ui/TasksViewModel.kt#L59
사용 버전: Android Studio Giraffe 2022.3.1
안드로이드 When .asLiveData() collect flow and where does를 알아보겠습니다.
플로우(Flow)에는 .asLiveData()를 제공해 줍니다. 이것은 flow를 livedata로 형 변환해 주는 건데요. 그럼 언제 콜렉트(collect)를 해서 라이브데이터(livedata)로 변환시키는 걸까요? 또 어디서 하는 걸까요?한 번 뜯어봅시다.
참고한 예제는 이 깃허브 프로젝트입니다.
https://github.com/android/codelab-android-datastore/blob/387043a665d401ee6a95b843e67b102de0dd2242/app/src/main/java/com/codelab/android/datastore/ui/TasksViewModel.kt#L59
여기를 보면 TasksViewModel에서 asLiveData()를 호출하고 있습니다.
collect가 숨겨져 있는데요. 아마도 asLiveData 안에 있지 않을까 예상해 봅니다.
그럼 asLiveData()를 한 번 뜯어봅시다.
여기에 정의되어 있는데요.
보시면 콜백 함수로 liveData(context, timeoutInMs)의 block에 collect와 emit이
있었습니다.
그렇다면, liveData(context, timeoutInMs)는 무엇인지 한 번 봐야 하지
않겠어요?
liveData는 이렇게 정의되어 있네요. 저기 352번째 줄을 보면 block은 활성화된
observer가 있어야 실행된다고 합니다.
즉, asLiveData()는 일단 ViewModel에서 호출을 하기 때문에 collect와 emit은
ViewModel에서 진행되는 것이고, 언제 실행되는가는 asLiveData()로 변환된
변수에 observer가 있을 때 실행되네요.
구글의 Codelab을 이용해서 구조를 공부하다 이렇게 깊게 파고드는 시간을
가져보았습니다.
끝.
카테고리: Android
댓글
댓글 쓰기
궁금한 점은 댓글 달아주세요.
Comment if you have any questions.