Flow 也是运行在协程中的,lifecycleScope 可以帮助 Flow 解决内存泄露的问题:
lifecycleScope.launch {
viewMode.stateFlow.collect {
updateUI(it)
}
}
虽然解决了内存泄漏问题, 但是 lifecycleScope.launch 会立即启动协程,之后一直运行直到协程销毁,无法像 LiveData 仅当 UI 处于前台才执行,对资源的浪费比较大。
因此,lifecycle-runtime-ktx 又为我们提供了 LaunchWhenStarted 和 LaunchWhenResumed ( 下文统称为 LaunchWhenX )
============================================================================
LaunchWhenX 会在 lifecycleOwner 进入 X 状态之前一直等待,又在离开 X 状态时挂起协程。lifecycleScope + launchWhenX