假设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)
}
}
什么时候取消
state()
返回的ReceiveChannel?这是内存泄漏吗? 最佳答案
documentation指出:
此外,它指出
结论:取消父作用域时的行为是不确定的,将来可能会更改。
这就是为什么对生产者使用GlobalScope
并使用返回的ReceiveChannel
显式控制生命周期的最佳选择的原因。该 channel 不会自动关闭/取消。
关于kotlin - GlobalScope与LifecycleOwner:CoroutineScope,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53490674/