在本示例代码中:
class MyFragment: Fragment {
init {
lifecycleScope.launch {
whenStarted {
}
}
}
}
只有当片段的生命周期开始时,whenStarted中的代码才会运行。不过,我不清楚这到底是干什么的,而不是仅仅在onViewCreated内部启动一个协同线。文档声明:
如果生命周期被破坏,而协同线通过其中一个when方法处于活动状态,则协同线将被自动取消。
这就是你使用lifecycleScope.launch的唯一原因吗?如果生命周期被终止,协同线会自动终止吗?
发布于 2020-01-13 15:50:28
lifecycleScope
是一个由SupervisorJob
管理的范围,其生命周期与Fragment
的生命周期相关联。因此,只要使用lifecycleScope
,当底层Lifecycle
实例(本例中的Fragment
's LifecycleRegistry
)被销毁时,协同机制就会被取消。
我相信lifecycleScope.launch { whenStarted {}}
是lifecycleScope.launchWhenStarted {}
的更详细的形式。如您所料,传入launchWhenStarted
的lambda将挂起,直到Fragment
处于启动状态。
,所以这是您使用lifecycleScope.launch的唯一原因吗?如果生命周期被终止,协同线会自动终止吗?
取消是好处之一。另一个好处是lifecycleScope.launch
默认使用MainDispatcher
(与默认使用Dispatches.Default
的其他构建器不同),因此它保证与它一起启动的协同器可以执行UI操作。
https://stackoverflow.com/questions/59718077
复制相似问题