gpt4 book ai didi

android - Kotlin 并行协程

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:18 24 4
gpt4 key购买 nike

从单独的协同程序中保存多个作业实例是否可以接受。假设我想同时运行几个协程,其中它们不相关并且不能在一个协程中发生,但我希望它们并行运行。在 Android 中,我应该保存作业实例,以便我可以在 onDestroy 方法中取消作业。将每项工作分别保存在列表中是否可以接受,或者我是否违反了某种规则。我知道在 RX 中他们有订阅,为什么 Kotlin Coroutines 中没有等效项?

val jobList = arrayListOf<Job>()

fun startJob1() {
jobList.add(launch {
//do some work
})

fun startJob1() {
jobList.add(launch {
//do some other unrelated work
})

override fun onDestroy() {
super.onDestroy()
cancelAllActiveJobs(jobList)
}

这种类型的架构对协程有意义吗?

最佳答案

您可以手动保留您启动的 Job 对象的列表,但您也可以使用开箱即用的父子作业层次结构来管理和保留列表更容易启动工作。

因此,首先,您定义对父作业的引用,而不是作业列表:

val job = Job()

然后,每次启动一个新协程时,您都会将其作为此作业的:

fun startJob1() {
launch(job) { // make it a child
//do some work
}
}

fun startJob1() {
launch(job) { // make it a child
//do some other unrelated work
}
}

最后,当您需要销毁对象并取消所有作业时,只需取消父作业即可。

override fun onDestroy() {
super.onDestroy()
job.cancel()
}

这种方法的优点是作业列表是自动管理的。可以启动新协程并将其添加到父作业,完成后它们会自动将自己从父作业中移除。

您可以在指南的相应部分阅读更多内容:https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md#cancellation-via-explicit-job

关于android - Kotlin 并行协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47230334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com