Lifecycle 과 연동 (누수방지)


화면에 정보를 표시하지 않거나 백그라운드 상태에서는 flow 에서 데이터를 collect 하고있으면 안된다.

Rx 에서 누수방지를 위해 subscribe 를 해제 하듯이 flow도 필요할때만 collect를 해야된다.

lifecycleScope 에서 직접 flow를 수집할경우

만약 reapeatOnLifecycle 을 사용안하고, lifecycleScope 코루틴에서 직접 flow를 수집할경우 앱이 백그라운드에 진입하고 나서도 flow를 업데이트 하는 메모리 누수가 발생한다.

이러한 메모리 누수를 방지하려면 OnStop 이 발생하면 flow의 collect 를 중단하는 로직이 필요하다.

 : 앱이 백그라운드에 있을때, Flow 수집을 중단한다. (대신, flow 생산자를 계속 활성화 시켜놓고 있어 메모리 누수가 발생한다.)

launchWhenStarted : 앱이 백그라운드에 있을때, Flow 수집을 중단한다. (대신, flow 생산자를 계속 활성화 시켜놓고 있어 메모리 누수가 발생한다.)

안드로이드 Lifecycle과 연동하여 누수방지를 해주는 여러 라이브들이 있다.

Lifecycle-aware alternatives