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

标签 android kotlin kotlin-coroutines

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

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

var job: Job? = null

job = launch {
    while (isActive){
    delay(5000)
    doStuff()
    }
}

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

最佳答案

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

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

job = launchNewJob()

Jobs/coroutines 不像 Threads 这样沉重的对象,所以你不必担心创建新的。

关于android - 如何重新启动已取消的作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58341909/

相关文章:

android - Kotlin 中的 Retrofit2 + SimpleXML : MethodException: Annotation must mark a set or get method

android - 为什么 Kotlin 允许在不同的文件夹中有两个具有相同名称和包的类(即 : main and androidTest)?

java - kotlin 中的静态最终字段继承

android - Room Dao LiveData 作为返回类型导致编译时错误

java - 如何在 Kotlin 的公共(public)池下创建单线程协程上下文?

android - Dispatcher.IO 和 Dispatcher.Main 哪个更适合用于 API 调用?

java - RecyclerView Adapter - 只有创建 View 层次结构的原始线程才能触摸其 View

android - BLE 的 - onCharacteristicRead 在调用 readCharacteristic 时未调用

android - 我想计算从 azure 表返回的行数

android - 如何检查大于 android N 的构建版本