일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- a
- Design Pattern
- Singleton
- 코틀린
- 싱글톤
- Kotlin
- ㅓ
- r
- ㅋㅁ
- 빌터패턴
- El
- 추상팩토리패턴
- Functional Programming
- Observer Pattern
- 옵저버 패턴
- 프로토타입 패턴
- 함수형프로그래밍
- 추상 팩토리
- 팩토리 메소드
- 디자인패턴 #
- factory method
- 디자인패턴
- builderPattern
- PrototypePattern
- Abstract Factory
- designPattern
- F
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Stateflow LiveData 본문
stateflow
- Observable하며 state를 지니고 있다.
- StateFlow는 최신 및 새로운 state가 생성된 경우에만 반환하고 동일한 state는 반환하지 않는다.
- flow는 일반적으로 cold stream(터미널 연산자가 실행시 생산자를 실행시킴), StateFlow는 hot stream입니다.
즉 일반 Flow는 최신의 state를 보유 할 수 없으며 터미널 연산자가 실행시 활성화 되는 반면 StateFlow는 최신의 state를 보유 할 수 있으며 생성하자마자 상태를 보유하며, 그렇기 때문에 반드시 초기값이 필요로한다.
StateFlow는 ConflatedBoradcastChannel을 대체하기 위해 설계되었습니다. StateFlow는 기본 콘셉트로 distinctUntilChanged 연산자의 기능을 가지고 있기 때문에, 업데이트될 때 같은 값이라면 필터 됩니다.
sharedflow
- ShraredFlow는 매우 잘 구성된 StateFlow의 일반화 버젼의 flow이다.
- StateFlow는 기본정책은 새 구독자가 있을 때 마지막으로 알려진 값을 내 보냅니다.
- SharedFlow를 사용하면 내보 낼 이전 값 수를 정할 수 있습니다.
- 값의 버퍼가 가득 차면 어떤 일이 발생하는지 정의할 수 있습니다. (백프레셔 발생시 - 생산된 값을 소비자가 빠르게 소비하지 못할때)
Stateflow VS LiveData
- StateFlow의 경우 초기 값이 반드시 필요하지만, LiveData의 경우는 필요하지 않습니다.
- View(Activity,Fragment)가 STOPPED 상태(백그라운드로 진입)가 되면 LiveData.observe()는 소비자를 자동으로 등록 취소하는 반면, StateFlow 또는 다른 flow에서 수집의 경우 자동으로 중지하지 않습니다.
class MyActivity : AppCompatActivity() {
private val viewModel = getViewModel()
override fun onCreate(savedInstanceState: Bundle?) {
lifecycleScope.launchWhenStarted {
viewModel.userName.collect { userName -> userNameLabel.text = userName }
}
}
}
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
viewModel.userName.asLiveData().observe(viewLifecycleOwner) { userName -> userNameLabel.text = userName }
}
}
- LiveData는 Android Lifecycle에 따라 달라지기 때문에 Views / ViewModels 외부에서 사용하기에 적합하지 않습니다.
- StateFlow는 LiveData와 같은 동작을 하지만, 더 많은 연산자(combind, zip, ect)와 더 좋은 성능을 가지고 있습니다.
- StateFlow API는 LiveData와 거의 동일하며 SharedFlow는 고급 사용 사례를 위한 유연성을 제공합니다.
- StateFlow는 LiveData (앱이 백그라운드로 이동하면 자동 구독 / 구독 취소)의 모든 이점을 얻을 수 있으므로 가치가 있습니다.
'Coroutine > coroutineFlow' 카테고리의 다른 글
flow 중간 연산자(Take, Buffer, conflate) (0) | 2021.06.04 |
---|---|
flow 중간 연산자 (Zip, Combine) (0) | 2021.06.04 |
Flow를 사용한 동시 실행 제어 (0) | 2021.05.31 |
Flow를 사용한 스타일 혼합 (0) | 2021.05.31 |
단일값을 보내는 flow 와 flow의 결합. (0) | 2021.05.31 |