본문 바로가기
Android/Compose

Compose의 상태 - Flow, LiveData

by 겸 2023. 11. 29.

Flow, LiveData의 상태

Flow의 상태

  1. collectAsStateWithLifecycle()

Lifecycle을 인식하는 방식으로 Flow의 값을 수집하므로 불필요한 리소스를 절약할 수 있다.

STARTED상태에만 Flow를 수집하도록 명시하지 않고, 간결한 코드로 대체할 수 있다.

 

명시해야 한다면 코드가 길어진다….

val lifecycle = LocalLifecycleOwner.current.lifecycle
val uiState by produceState<AuthorScreenUiState>(
    initialValue = viewModel.uiState.value
    key1 = lifecycle
    key2 = viewModel
) {
    lifecycle.repeatOnLifecycle(state = STARTED) {
        viewModel.uiState.collect { value = it }
    }
}

 

dependency 추가

dependencies { 
	implementation("androidx.lifecycle:lifecycle-runtime-compose:2.6.0-beta01") 
}

 

 

  1. collectAsState()

Flow에서 값을 수집하여 Sate로 변환한다.

collectAsStateWithLifecycle() vs collectAsState()

공통점

Flow에서 새로운 방출이 발생할 때마다 State객체의 값이 업데이트된다.

State.value를 관찰해 리컴포지션한다.

 

차이점 (출처)

collectAsStateWithLifecycle은 앱이 백그라운드 상태에 있을 때는 Flow의 수집을 중단한다.

따라서 리소스 낭비를 줄일 수 있다.

수명 주기 상태를 변경하기 위해서는 minActiveState 매개변수를 설정할 수 있다.

Android에서 Flow를 수집할 때는 대부분 collectAsStateWithLifecycle의 사용이 권장된다.

LiveData의 상태

  1. observeAsState()

LiveData를 관찰하고 State를 통해 값을 나타낸다.

 

dependency 추가

dependencies { 
	implementation("androidx.compose.runtime:runtime-livedata:1.3.2") 
}
반응형

'Android > Compose' 카테고리의 다른 글

Compose의 레이아웃 - 기본사항  (0) 2023.12.01
Compose의 상태 - 호이스팅이란?  (0) 2023.11.02
Compose의 상태  (0) 2023.11.02
Compose 이해  (0) 2023.10.26