gpt4 book ai didi

android-workmanager - 当 onStopped 是 final 时,如何在我的 CoroutineWorker 中执行清理代码?

转载 作者:行者123 更新时间:2023-12-01 11:13:14 25 4
gpt4 key购买 nike

我升级到 WorkManager 2.1.0 并尝试使用一些 Kotlin 扩展,包括 CoroutineWorker .我的 worker 正在延长 androidx.work.Worker以前,它通过覆盖 onStopped 来执行清理代码.为什么是 onStopped决赛在 CoroutineWorker ?在 CoroutineWorker 之后我还有其他方法可以执行清理代码吗?停止了吗?

根据 this blog post ,这应该是一个功能吗?

最佳答案

您可以随时使用 job.invokeOnCompletetion无需依赖 onStopped回拨 CoroutineWorker .例如

import android.content.Context
import android.util.Log
import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope

class TestWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {

companion object {
private const val TAG = "TestWorker"
}

override suspend fun doWork(): Result {
return coroutineScope {
val job = async {
someWork()
}

job.invokeOnCompletion { exception: Throwable? ->
when(exception) {
is CancellationException -> {
Log.e(TAG, "Cleanup on completion", exception)
// cleanup on cancellations
}
else -> {
// do something else.
}
}
}

job.await()
}
}

suspend fun someWork(): Result {
TODO()
}
}


关于android-workmanager - 当 onStopped 是 final 时,如何在我的 CoroutineWorker 中执行清理代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57011421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com