【发布时间】:2019-02-27 11:33:57
【问题描述】:
我正在尝试将以下功能迁移到Kotlin 1.3 的新Coroutine:
fun launchUI(strategy: CancelStrategy, block: suspend CoroutineScope.() -> Unit): Job {
return launch(context = UI, parent = strategy.jobs, block = block)
}
但是新的GlobalScope.launch 函数没有parent 参数。文档说:
父作业也继承自
CoroutineScope,但它 也可以用相应的coroutineContext元素覆盖。
但我不知道如何覆盖父作业。我现在已经这样实现了,但我不确定它是否会以同样的方式工作:
fun launchUI(strategy: CancelStrategy, block: suspend CoroutineScope.() -> Unit): Job {
val job = GlobalScope.launch(context = Dispatchers.Main, block = block)
strategy.jobs.invokeOnCompletion {
job.cancel()
}
return job
}
谁能帮帮我?
更新:
class CancelStrategy(owner: LifecycleOwner, val jobs: Job) : LifecycleObserver {
init {
owner.lifecycle.addObserver(this)
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy() {
jobs.cancel()
}
}
【问题讨论】:
-
什么是
CancelStrategy?
标签: android kotlin kotlin-coroutines