[英]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.