attached to post

TIL - 3 # Flow collectAsState vs collectAsStateWithLifecycle ## Flow란? 코루틴에서 suspend function을 통해 단일 값만 반환받지만 Flow는 코루틴 기반으로 비동기식으로 여러 값을 순차적으로 보낼 수 있습니다. ## Flow에서 값을 수집하는 방법 Flow 값을 수집하기 위해서 collect를 사용해서 코루틴 스코프에서 수집이 가능합니다. 하지만 이번에 알아볼 것은 Compose 내부에서 Flow 값을 수집하는 방법에 대해서입니다. Compose에서 값을 수집하기 위해서는 "collectAsStateWithLifecycle"을 사용하면 됩니다. ## collectAsStateWithLifecycle란? Android Compose에서 "collectAsStateWithLifecycle"를 사용하여 flow를 수집하는 권장합니다. 이를 통해 Flow에서 값이 발행되면 State 객체 값이 업데이트됩니다. 그리고 해당 값을 참조하고 있는 곳은 재구성이 됩니다. collectAsStateWithLifecycle 메소드를 봐보면 minActiveState 라는 파라미터가 있으며 디폴트값으로 Lifecycle.State.STARTED 으로 설정이 되어있습니다. 즉, 기본적으로 onStart에서 값을 수집하고 onPause에서 값 수집을 중지합니다 (변경 가능). 이를 통해서 백그라운드에서 리소스를 비활성화 시킬 수 있으며 CPU 사용량을 줄여서 배터리 소모량을 줄일 수 있고, 네트워크 트래픽을 줄일 수 있으며, 메모리 사용량을 줄일 수 있습니다. ## collectAsState vs collectAsStateWithLifecycle 둘 다 비슷하게 생겼으며, Compose에서 값을 수집한다는 것에 동일합니다. 차이점은 "Android Lifecycle"을 따르는지입니다. "collectAsState"는 Composition에 단계에서 flow를 수집하며, Composition에 단계에서 빠져나갈 때 수집을 중지합니다. Android에서 이처럼 수집하게 되면, 앱이 백그라운드 상태에서 Recomposition이 중지되어도 수집이 계속 활성화가 되어있습니다. ## collectAsState 존재 이유? ~이 부분이 가장 궁금해서 알아보게 되었습니다.~ "collectAsStateWithLifecycle"만 사용하면 될 것 같은데 왜 "collectAsState"가 따로 존재할까요? 우선 Compose는 여러 플랫폼에서 UI를 공유할 수 있는 선언형 프레임워크입니다. 즉, "collectAsState"는 Android Lifecycle과 무관한 Compose를 사용하는 다른 플랫폼을 위해 개발할 때 사용하는 것입니다. 참고 - https://developer.android.com/kotlin/flow?hl=ko - https://developer.android.com/jetpack/compose/state?hl=ko - https://medium.com/androiddevelopers/consuming-flows-safely-in-jetpack-compose-cde014d0d5a3

콘텐츠를 더 읽고 싶다면?
원티드에 가입해 주세요.
로그인 후 모든 글을 볼 수 있습니다.
댓글 4