如何重新启动已取消的作业?

mar*_*337 3 android kotlin kotlin-coroutines

我想使用协程而不是处理程序。我有一个电话,每隔几秒钟就会刷新数据。它是在Job对象中调用的。当我将应用程序留在后台时,我想取消此操作Job。当我回到应用程序时,我想重新启动这项工作来完成它的工作。

但一旦我取消工作,它就不会再重新启动。有什么办法可以重新启动已取消的作业吗?因为isActive == false即使我重新初始化变量

var job: Job? = null

job = launch {
    while (isActive){
    delay(5000)
    doStuff()
    }
}
Run Code Online (Sandbox Code Playgroud)

当我暂停活动时,我会调用job?.cancel()job = null 当我进入活动时,我将再次调用上面的代码。我想我可以重新初始化这项工作并再次启动刷新代码。

Ens*_*lic 5

无法重新启动cancel()ed 作业。但这很容易解决。而是开始一份新工作。你可以这样做:

fun launchNewJob() = launch {
    while (isActive) {
        delay(5000)
        doStuff()
    }
}

job = launchNewJob()
Run Code Online (Sandbox Code Playgroud)

Jobs/协程不像Threads 那样是重对象,所以你不需要担心创建新的对象。


Neo*_*Neo 5

您无法“重新启动”作业,但可以在将代码包装在其中时创建一个新作业:

var job = launch { jobFunction() }

fun jobFunction() {
    while (isActive){
      delay(5000)
      doStuff()
    }
}

if(job.isActive.not()) {
  job = launch( jobFunction() )
}
Run Code Online (Sandbox Code Playgroud)