Я пытаюсь перенести следующую функцию на новую Coroutine
из Kotlin 1.3
:
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()
}
}