при условии, что CoroutineScope реализован некоторым компонентом, учитывающим жизненный цикл, таким как Presenter
.когда предпочтительнее использовать GlobalScope.produce, а не CoroutineScope.produce;
interface IPresenter, CoroutineScope {
fun state(): ReceiveChannel<Event>
}
class Presenter(
override val coroutineContext: CoroutineContext
): IPresenter, DefaultLifecycleObserver {
fun state(): ReceiveChannel<Event> = GlobalScope.produce {
send( SomeEvent() )
}
fun someOperation() = produce {
send( SomeEvent() )
}
override fun onDestroy(owner: LifecycleOwner) {
coroutineContext.cancel()
owner.lifecycle.removeObserver(this)
}
}
когда аннулируется канал ReceiveChannel, возвращаемый state()
?это утечка памяти?