繁体   English   中英

为什么Android lifecycleScope可以自动取消

[英]Why Android lifecycleScope can be automatically cancelled

在阅读这篇关于生命周期感知型 CoroutineScope 的帖子时,我阅读了以下内容:

每个 Lifecycle 都带有一个 LifecycleScope,它可以让你启动协程,一旦 Lifecycle 达到 DESTROYED state 就会自动取消。

我正在阅读lifecycle-runtime-ktx.aar中的源代码,并试图弄清楚 lifecycleScope(在 Fragment 或 Activity 中访问)在被销毁时如何被取消。

任何人都可以指出为什么 lifecycleScope 可以自动取消吗? 这部分的源代码在哪里。 谢谢!

Activity & Fragment在内部使用LifecycleCoroutineScope ,然后通过lifecycle.addObserver挂钩到组件的Lifecycle周期。

如果您检查LifecycleCoroutineScopeImpl
你会看到这个:

if (lifecycle.currentState == Lifecycle.State.DESTROYED) {
    coroutineContext.cancel()
}

if (lifecycle.currentState <= Lifecycle.State.DESTROYED) {
    lifecycle.removeObserver(this)
    coroutineContext.cancel()
}

简而言之,
观察者被添加到组件中,如果lifecycle.currentState低于Lifecycle.State.DESTROYED则正在运行的协程将自动取消。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM