假设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/

10-10 01:50