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
当我进入活动时,我将再次调用上面的代码。我想我可以重新初始化这项工作并再次启动刷新代码。
无法重新启动cancel()ed 作业。但这很容易解决。而是开始一份新工作。你可以这样做:
fun launchNewJob() = launch {
while (isActive) {
delay(5000)
doStuff()
}
}
job = launchNewJob()
Run Code Online (Sandbox Code Playgroud)
Jobs/协程不像Threads 那样是重对象,所以你不需要担心创建新的对象。
您无法“重新启动”作业,但可以在将代码包装在其中时创建一个新作业:
var job = launch { jobFunction() }
fun jobFunction() {
while (isActive){
delay(5000)
doStuff()
}
}
if(job.isActive.not()) {
job = launch( jobFunction() )
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3847 次 |
| 最近记录: |