flow test

dada·2023년 2월 18일
0
post-thumbnail

📌 buffer 없음 + launch / launchWhenStarted

  • coldStream 이라 버퍼없고 launch에 묶인 collect라서 sopt이후에도 collect하고 flow도 계속 emit (cold flow 이면서 버퍼 없으면 flow의 emit은 collect를 따라가는 듯)

  • coldStream 이라 버퍼없고 launchWhenStarted에 묶인 collect라서 sopt이후엔 collect 안 하고 flow도 emit 멈춤

  • coldStream 인데 버퍼 있어서 collect 안하는데 emit

📌 buffer 있음 + 확장함수 안쓴 경우-> 무조건 emit 계속

  • hotStream이니까 무조건 버퍼있고 collect는 sopt이후에 멈췄는데 버퍼때문에 계속 emit

  • stateIn started조건을 뭘 주든 상관없이 flow 수집 확장함수 안쓰면 무조건 계속 emit

  • hotStream이니까 무조건 버퍼있고 collect는 sopt이후에 멈췄는데 버퍼때문에 계속 emit

  • stateIn started조건을 뭘 주든 상관없이 flow 수집 확장함수 안쓰면 무조건 계속 emit


📌 buffer 있음+ 확장함수 안쓴 경우 + stop->start

  • hotStream이니까 무조건 버퍼있고 collect는 stop이후에 멈췄고 emit은 확장함수 안썼으니까 계쏙됨
  • stateIn started조건을 WhileSubscribed로 주어서 처음 구독자 등록되면 새롭게 구독하다가 다시 collect되면 hot stream이니까 중간부터

  • hotStream이니까 무조건 버퍼있고 collect는 stop이후에 멈췄고 emit은 확장함수 안썼으니까 계쏙됨
  • stateIn started조건을 Eagerly로 주어서 ..

  • hotStream이니까 무조건 버퍼있고 collect는 stop이후에 멈췄고 emit은 확장함수 안썼으니까 계쏙됨
  • stateIn started조건을 Lazily로 주어서 ..

📌 buffer 있음 + 확장함수 쓴 경우

  • hotStream이니까 무조건 버퍼있고 collect는 sopt이후에 멈췄는데 버퍼때문에 계속 emit
  • stateIn started조건을 Eagerly로 주어서 구독자가 존재하지 않아도 upstream flow와 공유 계속되고 중간에 중지되지 않음 = 계속 emit
  • hotStream이니까 무조건 버퍼있고 collect는 sopt이후에 멈췄고 emit도 멈춤
  • stateIn started조건을 WhileSubscribed로 주어서 구독자가 등록되면 공유를 시작하고 구독자가 전부 없어지면 바로 중지함
  • hotStream이니까 무조건 버퍼있고 collect는 sopt이후에 멈췄는데 버퍼때문에 계속 emit
  • stateIn started조건을 Lazliy로 주어서 구독자가 등록되면 upstream flow와 공유 시작하고 중간에 중지되지 않음 = 계속 emit

📌 buffer 있음 + 확장함수 쓴 경우 + stop / start

  • Lazily는 중간값

  • WhileScrobe()는 새로운 스트림

  • Eagerly는 중간값

  • 다운로드처럼 뒤에서 emite되는 값들도 반영되어야 할 경우 확장함수 안쓰고 launchWhenStarted써야함

👉 Fragment 라이브사이클과 collect 재등록-> viewModel살아있을 때 stream 공유

fragment LifeCycle과 flow collector

  • Eagerly, Lazily
  • fragment가 화면회전되어 onDestroy-> onCreate될때 받고있던 값을 계속 받으려고 하면 하나의 stream을 계속 collect해야하니까 viewmodel에서 stateFlow값으로 만들어서 collect해야함
  • viewmodel이 살아있는 동안 stateFlow도 살아있으니까 중간에 새롭게 onCreateView되어서 새로운 collector가 등록되어도 방출하던 중간값을 받을 수 있음
  • 이때 모드를 Eagerly,Lazily로 해야 구독자 없어져도 공유를 멈추지 않는 타입이라 방출하던 중간값을 받을 수 있음
  • WhileSubscribed로 설정한 경우 처음부터 값을 다시 받게 되는데 구독자가 없어지면 stateIn이 공유를 중지하는 것과 관련있지 않을까

  • coldFlow면 화면회전되어서 새로운 collector가 등록되면 새로운 stream이 생성되어 처음부터 값 받으니까 중간값부터 못받음
profile
'왜?'라는 물음을 해결하며 마지막 개념까지 공부합니다✍

0개의 댓글

관련 채용 정보