从ViewModel的onCleared

时间:2018-11-08 19:48:37

标签: kotlin-android-extensions kotlinx.coroutines

使用Kotlin 1.3时,可以使用GlobalScope.launch启动作业,但我似乎无法弄清的一件事是如何跟踪“ GlobalScope.launch`”返回的Job并取消所有待处理的作业(如果它们处于活动状态)。

在旧版本的launch中,可以指定parent = parentJob,而可以简单地取消parentJob。但是,在使用GlobalScope.launch时,如何轻松地取消所有待处理的作业,因此从ViewModel的onCleared来看,可以取消所有待处理的作业。

1 个答案:

答案 0 :(得分:0)

因此,从根本上讲,您可以让您的ViewModel / AppComptActivity等从CoroutineScope继承。或者,您可以使用如下组成:

```

private val pendingJobs = Job()
private val coroutineScope = CoroutineScope(contextProvider.io + pendingJobs)

...
...

    coroutineScope.launch  {

    withContext(contextProvider.UI) {

    }
    }

```

然后使用适当的destroy方法调用pendingJobs.cancel()终止挂起的作业。