SharedFlow vs StateFlow

SharedFlow

  • Cold FlowHot Flow로 변환한 것.
  • MutableSharedFlow() 또는 shareIn()을 통해 생성한다.
  • SharingStarted1, 캐시 용량2를 설정할 수 있다.
  • 기본적으로 캐싱하지 않으며, BufferOverflow의 기본 값은 SUSPEND.

StateFlow

1SharingStarted: 실행 시점을 결정한다. Eagerly, Lazily, WhileSubscribed가 있다.
2Replay 캐시와 Extra Buffer(Replay에 사용되지 않는 캐시)의 용량. Replay 캐시는 새로 Collect하기 시작할 때 몇 번 Re-emit할 지 결정한다. 0으로 설정하면 Configuration 등으로 인해 액티비티가 재생성될때 emit()이 호출되기 전까지 뷰에 아무 것도 표시되지 않을 수 있다. 따라서 0으로 설정하는 것은 권장되지 않는다.