Android When .asLiveData() collect flow and where does

사용 언어: Kotlin 1.9.0
사용 버전: 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


댓글

이 블로그의 인기 게시물

Python OpenCV 빈 화면 만들기

Python urllib.parse.quote()

Python bytes.fromhex()

Android AVD Ram size change

Forensics .pyc 파일 .py로 복구하기

Android Minimum touch target size

KiCad 시작하기 7 (FreeRoute 사용하기 2)

Android Notification with Full Screen

C++ OpenCV 모폴로지 침식, 팽창

KiCad 시작하기 2 (PCB 만들기)