LifecycleScope.launch 与 onViewCreated 内的协程

And*_*Dev 6 android kotlin-coroutines

在此示例代码中:

class MyFragment: Fragment {
    init {
        lifecycleScope.launch {
            whenStarted {

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

whenStarted 中的代码仅在片段的生命周期开始时运行。我不清楚这到底是做什么的,而不仅仅是在 onViewCreated 内部启动一个协程。文档状态:

如果 Lifecycle 在协程通过 when 方法之一处于活动状态时被销毁,则协程将自动取消。

那么这是您使用lifecycleScope.launch 的唯一原因吗?如果生命周期终止,让协程自动终止?

Emm*_*uel 9

lifecycleScopeSupervisorJob由其生命周期与 的生命周期相关联的 a 管理的范围Fragment。因此,lifecycleScope当底层Lifecycle实例(在本例中为Fragment's LifecycleRegistry)被销毁时,仅通过使用您的协程就会被取消。

我相信这 lifecycleScope.launch { whenStarted {}}lifecycleScope.launchWhenStarted {}. 如您所料,传入的 lambdalaunchWhenStarted将暂停,直到Fragment处于启动状态。

那么这是您使用lifecycleScope.launch 的唯一原因吗?如果生命周期终止,让协程自动终止?

取消是好处之一。另一个好处是默认使用(与默认lifecycleScope.launch使用的MainDispatcher其他构建器不同Dispatches.Default),因此它保证使用它启动的协程可以执行 UI 操作。